Что плохого в этом методе?
Привет сообщество Codeproject,
Я работаю над проблемой, которая просит меня написать метод для вставки элемента
element
в массив arr
на указателе index
. Мой код прилагается ниже:Система оценки использует рандомизированный элемент, массив и индекс, но каждый раз, когда она запускает массив, который я возвращаю, кажется, что он пропускает элемент. Вот один из результатов оценки:
Expected result: {11, 10, 78, 59, 35, 46, 84, 84, 34, 90} Your result: {11, 10, 78, 59, 35, 46, 84, 84, 34}
Спасибо
Что я уже пробовал:
public void add(int index, int element) { int tempArr[] = new int[arr.length + 1]; for(int i = 0; i < index; i++) { tempArr[i] = arr[i]; } tempArr[index] = element; for(int i = index; i < arr.length; i++) { tempArr[i + 1] = arr[i]; } arr = tempArr; }
Полный исходный код:
<pre>public class ExpandingArray { private static final int STARTING_SIZE = 10; private int[] arr; private int currentSize; private int numElements; public ExpandingArray() { arr = new int[STARTING_SIZE]; currentSize = STARTING_SIZE; numElements = 0; } // Remove the element at index `index` and shift // all subsequent elements to the left. public int remove(int index) { // your code here int tempArr[] = new int[currentSize - 1]; for(int i = 0; i < index; i++) { tempArr[i] = arr[i]; } for(int i = index + 1; i < currentSize; i++) { tempArr[i - 1] = arr[i]; } currentSize--; arr = tempArr; return 0; } // Add the int `element` at the `index` in the array. // You'll need to shift everything one index to the right // after this index. public void add(int index, int element) { // your code here int tempArr[] = new int[arr.length + 1]; for(int i = 0; i < index; i++) { tempArr[i] = arr[i]; System.out.println(arr[i]); } tempArr[index] = element; System.out.println(tempArr[index]); for(int i = index; i < arr.length; i++) { tempArr[i + 1] = arr[i]; System.out.println(arr[i]); } arr = tempArr; } // Return the number of elements in your array. public int size() { return currentSize; } private boolean isFull() { return numElements == currentSize; } private void expand() { System.out.println("Expanding"); int newSize = currentSize * 2; int[] newArray = new int[newSize]; // Copy over old elements for(int i = 0; i < currentSize; i++) { newArray[i] = arr[i]; } currentSize = newSize; arr = newArray; } public int get(int index) { return arr[index]; } public void add(int x) { if(isFull()) { expand(); } arr[numElements] = x; numElements++; } public String toString() { String str = "{"; for (int i=0; i < numElements - 1; i++) { str += arr[i] + ", "; } if (str.length() > 0 && str.charAt(str.length()-2)==',') { str = str.substring(0, str.length()-2); str += "}"; } return str; } }
Richard MacCutchan
Я только что попробовал этот код, и он отлично работает. Пожалуйста, покажите свои результаты.
Yuxi Long
Привет,
Спасибо за помощь. Моя полная программа прилагается ниже. Спасибо!
Richard MacCutchan
Вы забыли увеличить currentSize
В вашем add
метод.
Mohibur Rashid
Я удалил свой ответ. Ваша функция правильна, и проблема, по-видимому, заключается в вашей другой функции, которая обращается к вашему прибытие переменная
Yuxi Long
Привет,
Спасибо за помощь. Моя полная программа прилагается ниже. Спасибо!