Я пытаюсь создать метод, который принимает массив, а затем возвращает этот массив в обратном порядке. Код, который я написал, возвращает массив в обратном порядке, но первые два значения теперь равны 0. Кто-нибудь знает, что я сделал неправильно?
public static int[] reverse(int[] x)
{
int []d = new int[x.length];
for (int i = 0; i < x.length/2; i++) // for loop, that checks each array slot
{
d[i] = x[i];
x[i] = x[x.length-1-i]; // creates a new array that is in reverse order of the original
x[x.length-1-i] = d[i];
}
return d; // returns the new reversed array
}
Вы присваиваете значения из неинициализированного массива d
в x
- это то, откуда начинаются нули (значение по умолчанию для int
в Java).
IIUC, вы смешиваете две стратегии реверсирования.
Если вы создаете новый массив, вам не нужно запускать более половины исходного массива, но над всем этим:
public static int[] reverse(int[] x) {
int[] d = new int[x.length];
for (int i = 0; i < x.length; i++) {
d[i] = x[x.length - 1 -i];
}
return d;
}
В качестве альтернативы, если вы хотите изменить массив на место, вам не нужен массив temp, только одна переменная (самое большее - есть также способы переключения двух int
без дополнительной переменной, но это другой вопрос):
public static int[] reverseInPlace(int[] x) {
int tmp;
for (int i = 0; i < x.length / 2; i++) {
tmp = x[i];
x[i] = x[x.length - 1 - i];
x[x.length - 1 - i] = tmp;
}
return x; // for completeness, not really necessary.
}
Вот короткий способ сделать это.
public static int[] reverse(int[] x)
{
int[] d = new int[x.length]; //create new array
for (int i=x.length-1; i >= 0; i--) // revered loop
{
d[(x.length-i-1)]=x[i]; //setting values
}
return d; // returns the new reversed array
}
Его простая ошибка; вы справляетесь с реверсированными данными в x; и возвращение d. Если вы вернете x, вы получите полные почитаемые данные.
d[i] = x[i]; // you are copying first element to some temp value
x[i] = x[x.length-1-i]; // copied last element to first; and respective...
x[x.length-1-i] = d[i]; // copied temp element to first element; and temp elements are nothing but array d
Таким образом, в конечном итоге вы создали почитаемый массив внутри x, а не d. Если вы вернете x, вы получили свой ответ. И d, который только наполовину испечен; поэтому вы получаете значение по умолчанию 0 для half-массива leftign. :)
x
когда вы должны использовать его только для чтения данных.