2012-08-13 75 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); 

但正如其他人指出,最明显的问题是,你忘了分配结果:)