为什么下面的代码没有返回所需的输出?它应该返回1,3,2,2,0,0,同时返回相同的数组

  • 本文关键字:返回 数组 输出 代码 java arrays move
  • 更新时间 :
  • 英文 :


当我运行下面的代码时,它返回的数组与输出相同。有人能告诉我哪里错了吗?

public class MoveZeroToend {
public static void main(String[] args) {
int[] arr = { 1, 3, 0, 2, 0, 2, 0 };
Move0Toend(arr);
}
static void Move0Toend(int[] arr) { // Code to move zeroes to end
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
swap(arr[i], arr[count]);
count++;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " "); // Print the array
} 
}
static void swap(int a, int b) { // To swap
a = a + b;
b = a - b;
a = a - b;
}
}

在您的交换方法上,您不是在交换已传递对象的实际值,而是在传递给该方法的值之间进行交换,但没有返回结果,因此不会发生任何事情。您需要在实际对象上进行交换(而不是在方法中(,或者使用另一种方法。我建议在谷歌上搜索";传递值";以及";通过引用传递";。我还建议添加一个单元测试,或者至少调试程序,这样你就可以验证你的代码正在做你想要的事情。

您的交换方法不会返回任何值,也不会更改所传递对象的引用中的值。要解决此问题,您可以从交换方法返回两个值(a和b(,也可以不在方法中返回,这样会直接影响对象。为了进一步解释,swap方法中的变量a和b是swap方法的本地变量,更改这些变量不会影响任何其他变量,即使它们的名称也相同,并且由于您的方法是一个void,因此无法返回任何内容。希望这有帮助:(

您的swap((方法没有对数组执行任何操作,您只是传递两个值a和b并交换它们,但没有对数组进行任何操作。

不将这两个值传递给swap((方法,您可以在for循环中直接交换它们,如下所示:

for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
int temp = arr[i];
arr[i] = arr[count];
arr[count] = temp;
count++;
}
}

相关内容

  • 没有找到相关文章

最新更新