При полной потере с кодом обработки списка Java

Хорошо, возможно, это будет очень простой вопрос, но, честно говоря, я новичок в кодировании и столкнулся с кирпичной стеной. Мне нужно вставить значение в массив, сдвинуть данные вправо и обновить размер массива. Профессор предоставил нам комментарии для структурирования нашего кода, и я получил большую его часть, но эта последняя часть убивает меня. Кто-нибудь может помочь? Вот код (соответствующая часть находится под // вставкой значения и сдвига данных... и т. Д.):

public class List {

    // Declare variables
    private int size = 0;
    private int maxSize = 100;
    private int[] data;
    Scanner keyboard = new Scanner(System.in);

    // constructors
    public List() {
        data = new int[maxSize];
    }

    public List(int maxSize) {
        this.maxSize = maxSize;
        data = new int[maxSize];
    }

    // methods
    // Adds a value into the array and updates the size
    public boolean add(int value) {
        if (size == maxSize) {
            System.out.println("Cannot add value since the list is full");
            return false;
        }
        data[size] = value;
        size++;
        return true;
    }

    // add multiple values to the list obtained from the keyboard
    public void addValues() {
        // declare local variables
        int count = 0;

        System.out.println("Enter multiple integers separated by spaces");
        String line = keyboard.nextLine();
        Scanner scanLine = new Scanner(line);
        try {
            while (scanLine.hasNext()) {
                data[size] = scanLine.nextInt();
                count++;
                size++;
            }
        } catch (ArrayIndexOutOfBoundsException aiobe) {
            System.out.println("Only " + count + " values could be added before the list is full");
            return;
        } catch (InputMismatchException ime) {
            System.out.println("Only " + count + " values could be added due to invalid input");
            return;
        }
    }

    // This will print all the elements in the list
    public void print() {
        System.out.println();
        for (int i = 0; i < size; i++) {
            System.out.print(data[i] + " ");
        }
        System.out.println();
    }

    // This methods returns the index of the key value if found in the list
    // and returns -1 if the key value is not in the list
    public int find(int key) {
        for (int i = 0; i < size; i++) {
            if (data[i] == key) {
                return i;
            }
        }
        return -1;
    }

    // This methods deletes the given value if exists and updates the size.
    public boolean delete(int value) {
        int index = find(value);
        if (index == -1) {
            System.out.println("The specified value is not in the list");
            return false;
        }
        for (int i = index; i < size - 1; i++) {
            data[i] = data[i + 1];
        }
        size--;
        return true;
    }

    // This methods inserts the value at the given index in the list
    public boolean insertAt(int index, int value) {
        // validate index value and insertability
        if (index < 0 || index > size || size == maxSize) {
            System.out.println("Invalid index or list is already full");
            return false;
        }
        // insert value and shift data to the right and update the size

        return true;
    }

    // This method removes the value at given index and shifts the data as needed
    public boolean removeAt(int index) {
        if (index >= 0 && index < size) {
            for (int i=index+1; i<size; i++)
                data[i-1] = data[i];
            size--;
            return true;
        }
        return false;
    }

    // This method sorts the values in the list using selection sort
    public void sort() {
        int temp;
        for (int j=size; j>1; j--) {
            int maxIndex = 0;
            for (int i=1; i<j; i++)
                if (data[maxIndex] < data[i])
                    maxIndex = i;
            temp = data[j-1];
            data[j-1] = data[maxIndex];
            data[maxIndex] = temp;
        }
    }
}

Я прошу прощения, если код действительно ужасно структурирован, кстати, я не был уверен, как отформатировать его на этом сайте, чтобы он выглядел правильно.

3 ответа

// вставляем значение и смещаем данные вправо и обновляем размер

// Я думаю, что размер объявлен глобально, верно?

размер ++;

for(int i=size - 1; i < 0; i--) {
    data[i] = data[i - 1];
}
data[index] = value;

Если у вас максимальный размер, также будет проверка размера <= maxSize. Надеюсь, поможет

public boolean insertAt(int index, int value) {
        // validate index value and insertability
        if (index < 0 || index > size || size == maxSize) {
            System.out.println("Invalid index or list is already full");
            return false;
        }
        // insert value and shift data to the right and update the size
           for (int i=size - 1; i > index; i--)
           data[i+1] = data[i];
           data[index] = value
           size++;
        return true;
    }

Подумайте ниже, ответ должен помочь. Поскольку уже есть проверка размера, нет необходимости проверять это снова

public boolean insertAt(int index, int value) {
    // validate index value and insertability
  if (index < 0 || index > 5) {
    System.out.println("Invalid index or list is already full");
    return false;
  }
  // insert value and shift data to the right and update the size

  for(int i=index;i<size;i++) {
      data[++i] = data[i];
  }
  data[index] = value;

  return true;
}
Другие вопросы по тегам