2012-08-13 35 views
2

我有一個關於從一個方法返回數組返回到main的問題。它正在嚴重地讓我煩惱,我無法把我的大腦包裹在內。它似乎即使我已經改變了我的方法中的數組,當我去顯示它在主顯示舊數組。我試圖刪除我的數組中的重複數字,我知道它的工作原理是因爲我已經在調試器中完成了它,但是在我返回並返回到main之後,它將再次顯示整個數組!我知道這一定很容易讓我在這裏失蹤。有人可以請指點我正確的方向嗎?這裏是我的代碼...返回數組到主方法

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] numbers = new int[10]; 

    System.out.print("Enter 10 numbers: "); 

    for (int x = 0; x < numbers.length; ++x) 
     numbers[x] = input.nextInt(); 

    eliminateDuplicates(numbers); 

    for (int y = 0; y < numbers.length; ++y) 
     System.out.print(numbers[y] + " "); 
} 


public static int[] eliminateDuplicates(int[] numbers) { 
    int[] temp = new int[numbers.length]; 
    int size = 0; 
    boolean found = false; 

    for (int x = 0; x < numbers.length; ++x) { 

     for (int y = 0; y < temp.length && !found; ++y) { 
      if (numbers[x] == temp[y]) 
       found = true; 
     } 
     if (!found) { 
      temp[size] = numbers[x]; 
      size++; 
     } 
    found = false; 
    } 

    int[] result = new int[size]; 
    for (int z = 0; z < result.length; ++z) 
     result[z] = temp[z]; 

    return result; 
} 
} 

回答

5

看這個電話:

eliminateDuplicates(numbers); 

你忽略返回值。也許你想要:

numbers = eliminateDuplicates(numbers); 

我有時希望Java有一種方法來指示方法的返回值不應該被忽略。這將節省大量的問題,各地InputStream.read以及...

3

它應該是:numbers = eliminateDuplicates(numbers);

你基本上忽略從方法返回的結果。

+0

哈哈我知道這是愚蠢的東西。非常感謝您的快速回答......我現在覺得很愚蠢。自我教學有時很粗糙 – Eventh 2012-08-13 06:21:05

1

這樣做:

int[] result =eliminateDuplicates(numbers); 
for (int y = 0; y < result.length; ++y) 
    System.out.print(numbers[y] + " "); 

而且,在你eliminateDuplicates()方法,直接通過去除temp陣列使用result陣列。或將temp重命名爲result並將其返回。下面的代碼是不必要的:

int[] result = new int[size]; 
    for (int z = 0; z < result.length; ++z) 
     result[z] = temp[z]; 
+0

是的,但是如果沒有包含在原始數組中的數字,那麼大小仍然不是10,我會得到0。 – Eventh 2012-08-13 06:24:23

0

在你的主,試試這個:

numbers = eliminateDuplicates(numbers); 
+0

猜猜我太慢了。哈哈。 – geffchang 2012-08-13 06:21:06

+0

@Pramod我想你編輯了錯誤的答案。 – geffchang 2012-08-13 06:33:20

+0

哦,對不起,我生氣了 – 2012-08-13 06:34:33

0

方法調用應該是這樣的 -

numbers = eliminateDuplicates(numbers); 

你不要再追結果通過eliminateDuplicates函數返回。

0

在Java中,parameters are passed by value,因此您不能使用numbers作爲輸入/輸出參數。

例如如果C#你可以做

eliminateDuplicates(ref numbers); 

但正如其他人指出,最明顯的問題是,你忘了分配結果:)