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;
}
}
4

6 回答 6

5

看看这个调用:

 eliminateDuplicates(numbers);

您忽略了返回值。也许你想要:

 numbers = eliminateDuplicates(numbers);

有时我希望 Java 有一种方法可以指示方法的返回值不应该被忽略。它也将节省很多问题InputStream.read......

于 2012-08-13T06:19:48.407 回答
3

它应该是:numbers = eliminateDuplicates(numbers);

您基本上忽略了该方法返回的结果。

于 2012-08-13T06:19:21.477 回答
1

这样做:

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

另外,在您的eliminateDuplicates()方法中,result通过删除数组直接使用temp数组。或者重命名tempresult返回它。以下代码是不必要的:

int[] result = new int[size];
    for (int z = 0; z < result.length; ++z)
        result[z] = temp[z];
于 2012-08-13T06:19:58.410 回答
0

在 Java 中,参数是按值传递的,因此不能numbers用作输入/输出参数。

例如,如果你是 C#,你可以做到

 eliminateDuplicates(ref numbers);

但正如其他人指出的那样,最明显的问题是您忘记分配结果:)

于 2012-08-13T06:29:32.273 回答
0

在你的主要,试试这个:

numbers = eliminateDuplicates(numbers);
于 2012-08-13T06:20:06.550 回答
0

方法调用应该是这样的 -

numbers = eliminateDuplicates(numbers);

您没有捕捉到通过消除功能返回的结果。

于 2012-08-13T06:20:24.090 回答