2013-03-08 52 views
0

我想用下面的代碼反轉一個數組,並且沒有成功。該程序的輸出是7,0,0而不是7,1,2它應該是。在Java中反轉數組的程序

代碼:

import java.util.Arrays; 

public class ReverseArray 
{ 
    public static void main(String[] args) 
    { 
     int[] data = {1, 2, 7}; 
     int[] dataR = reverseArray(data); 
     System.out.println("Original Array: " + Arrays.toString(data)); 
     System.out.println("Reverse Array: " + Arrays.toString(dataR)); 
    } 
    public static int[] reverseArray(int[] data) 
    { 
     int[] reversedData = new int[data.length]; 
     int i; 
     for(i=0; i < data.length; i++); 
     { 
      reversedData[i] = data[(data.length - i -1)]; 
     } 
     return reversedData; 
    } 
} 

所有幫助表示讚賞,感謝。

+4

你需要手工做的呢?你可以使用'Collections.reverse(Collections.toArray(data))。toArray(new int [data.length])''嗎? – MadProgrammer 2013-03-08 00:26:32

+0

@BheshGurung我是說「像」:P - 試圖確定是否有人功課與否;) – MadProgrammer 2013-03-08 00:40:27

回答

8

這是你的問題:

for(i=0; i < data.length; i++); 

刪除;。你寫它的方式,首先有一個循環,計算i高達data.length,然後一個範圍塊試圖訪問reversedData[data.length]一次。那不會飛。

有趣的事情:原來,可能是我們誰看見是什麼問題;在IDE中使用格式化規則會很快告訴你什麼是錯誤的:當你按照你習慣的規則進行格式化時,你會發現你的代碼看起來並不像你想要的那樣。

+0

它還需要中途停下來data.length或它顛倒了數組,那麼它unreverses:P – Patashu 2013-03-08 00:31:56

+0

@Patashu:不,它正在構建一個新陣列,而不是交換。 – nneonneo 2013-03-08 00:32:31

+0

啊,我的錯誤撇取:) – Patashu 2013-03-08 00:32:52

0

你應該使用臨時變量數組來交換值。例如是這樣的:

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

ArrayUtils.reverse(int[] array) 

this問題的所有說明。

+0

Ehem,他沒有交換任何東西,他正在構建一個全新的陣列。 – nneonneo 2013-03-08 00:31:39

0

Good catch,G. Bach。我也不確定你的問題的第一部分。它看起來像原始數組是1, 2, 7。那不是7, 2, 1而不是7, 1, 2

這就是說,它好像你可能通過訪問每次data.length放緩下來。我可能會創建一個正是如此局部變量:

public static int[] reverseArray(int[] data) 
{ 
    int arr_length = data.length 
    int[] reversedData = new int[arr_length]; 
    int j = arr_length - 1; 
    for(int i=0; i < arr_length; i++); 
    { 
     reversedData[i] = data[j--]; 
    } 
    return reversedData; 
} 

注意如何j它被訪問後自動遞減,保持整潔,整齊。另外,我們已經將數組長度保存到局部變量中,因此訪問效率更高。

+0

只要讓JVM的JIT處理它。 ('方面,你每次都在'i nneonneo 2013-03-08 01:11:43

+0

哦,是的,因爲在循環體內的長度可能會發生變化,所以它必須檢查。好點子。 ^^; – Onikoroshi 2013-03-11 15:25:31

0
import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static void main(String[] args) { 
     /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ 
     Scanner in=new Scanner(System.in); 
     int size=in.nextInt(); 
     int array[]=new int[size]; 

     for(int i=0;i<size;i++){ 
      array[i]=in.nextInt(); 
     } 
     for(int i=size-1;i>=0;i--) 
     { 
      System.out.print(array[i]+" "); 
     } 


     } 

     } 
0
import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class ReverseArray 
{ 

    public static void main(String[] args) 
    { 

     System.out.println("Enter the array Size"); 
     Scanner in=new Scanner(System.in); 
     int size=in.nextInt(); 
     System.out.println("Enter the array Elements"); 
     int array[]=new int[size]; 

     for(int i=0;i<size;i++){ 
      array[i]=in.nextInt(); 
     } 
     System.out.println("reverse of entered are given below for Size : " +size); 
     for(int i=size-1;i>=0;i--) 
     { 
      System.out.print(array[i]+" "); 
     } 


     } 

} 
+0

請同時給你的答案添加一些解釋。 – Sampada 2016-05-06 05:23:20