2013-02-13 4 views
1

Я пытаюсь изменить массив значений int. Кажется, он не делает это правильно. Отметьте, что я печатаю по-разному, например Array.toString(), а также используя println.Индекс обратного массива ints

Оригинальные принты массив:

1 4 9 16 9 

мне это нужно для печати:

9 16 9 4 1 

Вот мой код:

import java.util.Arrays; 

public class ReverseArray { 
    public static void main(String[] args) { 
     int[] data = { 1, 4, 9, 16, 9 }; 
     reverseArray(data); 
     int[] dataR = reverseArray(data); 
     System.out.println("Reveresed data " + Arrays.toString(dataR)); 
    } 

    public static int[] reverseArray(int[] data) { // returns the reverse of the 
                // array data 
     // int [] data = new int[5]; 
     int[] reversedData = new int[data.length]; 

     data[0] = 1; 
     data[1] = 4; 
     data[2] = 9; 
     data[3] = 16; 
     data[4] = 9; 

     System.out.println(Arrays.toString(data)); 
     for (int i = 0; i < data.length - 1; i++) { 
      System.out.println("Original Array: " + data[i]); 
     } 

     int reveresedData[] = data; 

     for (int i = 0; i < reveresedData.length - 1; i++) { 
      reversedData[(data.length - 1) - i] = data[i]; 
      System.out.println(reveresedData[i]); 
     } 
     return reveresedData; 
    } 

} 
+0

Почему у вас столько повторяющегося кода и повторное присвоение того же предмета снова и снова? –

+0

Большая часть вашего кода кажется ненужной .. –

+0

Это сеанс класса. Переход через циклы, массивы, различные способы печати массивов и многое другое. – PrimalScientist

ответ

2

(используя для каждого цикла: Умнее путь) Создать метод следующим образом:

private int[] reverseArray(int [] array1){ 
     int index=array1.length; 
     int [] array2 = new int[index]; 
     for(int i:array1){ 
      array2[index-1]= i; 
      index--; 
     } 
     return array2;  
} 

И называют это нравится:

int [] array1 = {1,2,3}; 
int reversedArray[] = reverseArray(array1); 

это так.

+1

как «для каждого» умнее, чем обычный цикл? – Woot4Moo

+0

родной против нормального разницы в коде. то, что мы делаем в регулярном для цикла, немного медленнее, чем для каждого цикла. вы можете проверить, используя обход большого массива. , потому что native всегда быстрее, чем код уровня приложения. –

+1

Кажется, я получаю исключение из-за пределов? array2 [index] = i; – PrimalScientist

2

Проблема в том, что следующее:

int reveresedData[] = data; 

делает reveresedData указывает тот же массив, что и data. Вместо этого вам нужно создать новый массив (или изменить алгоритм так, чтобы он менял массив на месте).

Чтобы создать новый массив, вы можете использовать любой из:

int reveresedData[] = new int[data.length]; 
int reveresedData[] = data.clone(); 
+0

Я бы рекомендовал Arrays.copyOf (...) – Woot4Moo

+0

Brilliant. Спасибо:] – PrimalScientist

1

должно быть что-то вроде этого:

int reversed[] = new int[data.length]; 

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

for (int i = 0,j=reversed.length-1; i < reversed.length-1; i++;j--){ 
     reversed[i]=data[j]; 
    } 
+0

Ницца! Спасибо. – PrimalScientist

+0

Мое синтаксис может быть выключен в цикле for, поскольку я не вводил это в веб-идее. – Woot4Moo

+0

Все еще отлично, хотя .... Помогает много. Спасибо. – PrimalScientist

1

Вот базовый подход к обратному массиву любого размера. Он меняет исходный массив.

public class ReverseMyArray { 
public static int[] reverseArray(int[] array) { 
    for(int i=0; i<array.length/2; i++) { 
     int temp = array[i];     // temp is a temporary variable of type int 
     array[i] = array[array.length-1-i]; 
     array[array.length-1-i] = temp; 
    } 
    return array; 
} 

public static void main(String[] args) { 
    int[] array = {1,4,9,16,9}; 
    int[] newArray = reverseArray(array); 
    for(int i=0; i<newArray.length; i++) {   
     System.out.print(newArray[i]+" ");  // Print the reversed array values 
    } 
} 
} 
+0

Ницца, спасибо. – PrimalScientist

Смежные вопросы