我有一个关于将数组从一个方法返回到main的问题。这是严重开始惹恼我,我不能围绕这个包裹我的大脑。好像即使我在我的方法中更改了数组,当我在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;
}
}
答案 0 :(得分:5)
看看这个电话:
eliminateDuplicates(numbers);
你忽略了返回值。也许你想要:
numbers = eliminateDuplicates(numbers);
我有时希望Java有一种方法来指示不应忽略方法的返回值。它会在InputStream.read
周围保存很多问题......
答案 1 :(得分:3)
应该是:numbers = eliminateDuplicates(numbers);
你基本上忽略了方法返回的结果。
答案 2 :(得分:1)
这样做:
int[] result =eliminateDuplicates(numbers);
for (int y = 0; y < result.length; ++y)
System.out.print(numbers[y] + " ");
此外,在您的eliminateDuplicates()
方法中,通过删除result
数组直接使用temp
数组。或者将temp
重命名为result
并将其返回。以下代码是不必要的:
int[] result = new int[size];
for (int z = 0; z < result.length; ++z)
result[z] = temp[z];
答案 3 :(得分:0)
在你的主体中,试试这个:
numbers = eliminateDuplicates(numbers);
答案 4 :(得分:0)
方法调用应该是这样的 -
numbers = eliminateDuplicates(numbers);
您没有通过eliminateDuplicates函数捕获返回的结果。
答案 5 :(得分:0)
在Java中,parameters are passed by value,因此您无法将numbers
用作输入/输出参数。
e.g。如果你C#你可以做到
eliminateDuplicates(ref numbers);
但正如其他人所指出的,最明显的问题是你忘了分配结果:)