Как изменить массив int в Java? - PullRequest
208 голосов
/ 26 января 2010

Я пытаюсь перевернуть массив int в Java.

Этот метод не переворачивает массив.

for(int i = 0; i < validData.length; i++)
{
    int temp = validData[i];
    validData[i] = validData[validData.length - i - 1];
    validData[validData.length - i - 1] = temp;
}

Что с ним не так?

Ответы [ 39 ]

4 голосов
/ 16 августа 2015
for(int i=validData.length-1; i>=0; i--){
  System.out.println(validData[i]);
 }
3 голосов
/ 26 января 2010

Ваша программа будет работать только length = 0, 1. Вы можете попробовать:

int i = 0, j = validData.length-1 ; 
while(i < j)
{
     swap(validData, i++, j--);  // code for swap not shown, but easy enough
}
3 голосов
/ 15 октября 2017

В случае Java 8 мы также можем использовать потоки для обращения к целочисленному массиву как:

int[] sample = new int[]{1,2,3,4,5};
int size = sample.length;
int[] reverseSample = IntStream.range(0,size).map(i -> sample[size-i-1])
                      .toArray(); //Output: [5, 4, 3, 2, 1]
3 голосов
/ 13 сентября 2011

Если вы работаете с данными, которые являются более примитивными (например, char, byte, int и т. Д.), То вы можете выполнять забавные операции XOR.

public static void reverseArray4(int[] array) {
    int len = array.length;
    for (int i = 0; i < len/2; i++) {
        array[i] = array[i] ^ array[len - i  - 1];
        array[len - i  - 1] = array[i] ^ array[len - i  - 1];
        array[i] = array[i] ^ array[len - i  - 1];
    }
}
2 голосов
/ 26 января 2010

Наиболее эффективно просто перебирать массив в обратном направлении.

Я не уверен, что решение Аарона делает этот vi этот вызов Collections.reverse(list); Кто-нибудь знает?

2 голосов
/ 09 декабря 2015
public void getDSCSort(int[] data){
        for (int left = 0, right = data.length - 1; left < right; left++, right--){
            // swap the values at the left and right indices
            int temp = data[left];
            data[left]  = data[right];
            data[right] = temp;
        }
    }
1 голос
/ 04 августа 2014

Разве это не будет гораздо менее вероятным для ошибок?

    int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int[] temp = new int[intArray.length];
    for(int i = intArray.length - 1; i > -1; i --){
            temp[intArray.length - i -1] = intArray[i];
    }
    intArray = temp;
1 голос
/ 19 октября 2017

Решение с o (n) временной сложностью и o (1) пространственной сложностью.

void reverse(int[] array) {
    int start = 0;
    int end = array.length - 1;
    while (start < end) {
        int temp = array[start];
        array[start] = array[end];
        array[end] = temp;
        start++;
        end--;
    }
}
1 голос
/ 23 января 2012
public void display(){
  String x[]=new String [5];
  for(int i = 4 ; i > = 0 ; i-- ){//runs backwards

    //i is the nums running backwards therefore its printing from       
    //highest element to the lowest(ie the back of the array to the front) as i decrements

    System.out.println(x[i]);
  }
}
0 голосов
/ 09 декабря 2014
private static int[] reverse(int[] array){
    int[] reversedArray = new int[array.length];
    for(int i = 0; i < array.length; i++){
        reversedArray[i] = array[array.length - i - 1];
    }
    return reversedArray;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...