Java Bubblesort仅交换第一个数组项

Java Bubblesort仅交换第一个数组项,java,arrays,for-loop,sorting,bubble-sort,Java,Arrays,For Loop,Sorting,Bubble Sort,我的冒泡排序代码仅交换第一个数组项。所有其他项目保留为0。我认为我的嵌套循环是错误的,或者我还不能正确地诊断它。这是我的代码 public void swap(int i, int j) { int temp; temp = i; i = j; j = temp; } public void sortArray(int [] sourceArray, int [] targetArray, int allArraySize){ for(i

我的冒泡排序代码仅交换第一个数组项。所有其他项目保留为0。我认为我的嵌套循环是错误的,或者我还不能正确地诊断它。这是我的代码

    public void swap(int i, int j) {

    int temp;

    temp = i;
    i = j;
    j = temp;
}


public void sortArray(int [] sourceArray, int [] targetArray, int allArraySize){

    for(int i = 0; i < allArraySize; i++) {
        targetArray[i] = sourceArray[i];
        for (i = 0; i < allArraySize; i++) {
            for(int j = i+1; j < allArraySize;j++) {
                if(targetArray[i] > targetArray[j]) {
                    swap(i, j);
                }
            }

        }

    }
}
非常感谢您的反馈。我显然是个编程新手。我已将代码更改为此

public void sortArray(int [] sourceArray, int [] targetArray, int allArraySize){
    int temp;

    for(int i = 0; i < allArraySize; i++) {
        targetArray[i] = sourceArray[i];
        for (i = 0; i < allArraySize; i++) {
            for(int j = i+1; j < allArraySize;j++) {
                if(targetArray[i] > targetArray[j]) {
                    temp = targetArray[i];
                    targetArray[i] = targetArray[j];
                    targetArray[j] = temp;
                }
            }

        }

    }
}

结果仍然是交换1个项目,但现在是最后1个。如果还有人能帮助我,我将不胜感激。

详细解释了原因。总之,java按值传递参数,swap方法只交换局部变量,但对sortArray方法中的变量没有影响


一个简单的解决方法是将交换代码直接包含在if中。注意:我没有检查您的代码的其余部分。例如,您可能想交换数组中的元素而不是索引。

中详细解释了原因。总之,java按值传递参数,swap方法只交换局部变量,但对sortArray方法中的变量没有影响


一个简单的解决方法是将交换代码直接包含在if中。注意:我没有检查您的代码的其余部分。例如,您可能想交换数组中的元素,而不是索引。

您使用的是两倍于i计数器:

for(int i = 0; i < allArraySize; i++) {
    targetArray[i] = sourceArray[i];
        for (i = 0; i < allArraySize; i++) {
        ...

可能是内部循环正在覆盖外部循环中使用的i计数器。

您使用的i计数器是外部循环的两倍:

for(int i = 0; i < allArraySize; i++) {
    targetArray[i] = sourceArray[i];
        for (i = 0; i < allArraySize; i++) {
        ...

可能是内部循环正在覆盖外部循环中使用的i计数器。

请注意,这是我第一次发布Stackoverflow。我已经用很多语言编写了程序,但没有一种是真正的O-O语言。我已经在业余时间攻击Java一个月左右了

与msg 1中的原始代码一样,我觉得有必要通过单独的过程进行交换,因为这样做非常有效,并且在Pascal、VBasic等中作为分治编程实践的一部分受到鼓励。所以我也很困惑,为什么我的相同交换例程在Java中不起作用。。。直到我重新阅读有关参数传递的内容。我终于明白了,为了改变数组的内容,需要传递数组本身

public static void swap(int [] a, int i, int j) {
    int c  = a[i];
      a[i] = a[j];
      a[j] = c;
  }
以上这些对我来说很有用,尽管我一直在努力学习Java,但我还是为自己最终找到了答案而感到自豪。但是天哪。。。。很平常的事情让人困惑,是吗

另一方面,我想我学会了引用的含义以及如何处理它

我猜我无意中封装了swap方法的工作原理,因此遵循了O-O原则。所以双倍好吗


但这让我不禁要问:在这种程度上分而治之只是一个愚蠢的想法吗?毕竟,将三行交换例程与排序例程的其余部分内联是常识,但我的交换方法是愚蠢的,或者,如果不是最好的,至少是好的Java实践?

请注意,这是我第一次发表Stackoverflow。我已经用很多语言编写了程序,但没有一种是真正的O-O语言。我已经在业余时间攻击Java一个月左右了

与msg 1中的原始代码一样,我觉得有必要通过单独的过程进行交换,因为这样做非常有效,并且在Pascal、VBasic等中作为分治编程实践的一部分受到鼓励。所以我也很困惑,为什么我的相同交换例程在Java中不起作用。。。直到我重新阅读有关参数传递的内容。我终于明白了,为了改变数组的内容,需要传递数组本身

public static void swap(int [] a, int i, int j) {
    int c  = a[i];
      a[i] = a[j];
      a[j] = c;
  }
以上这些对我来说很有用,尽管我一直在努力学习Java,但我还是为自己最终找到了答案而感到自豪。但是天哪。。。。很平常的事情让人困惑,是吗

另一方面,我想我学会了引用的含义以及如何处理它

我猜我无意中封装了swap方法的工作原理,因此遵循了O-O原则。所以双倍好吗


但这让我不禁要问:在这种程度上分而治之只是一个愚蠢的想法吗?毕竟,将三行交换例程与排序例程的其余部分内联是常识,但是我的交换方法是愚蠢的,或者,如果不是最好的,那么至少是好的Java实践吗?

另外,为了在交换方法中实现这一点,您将需要如下内容:void swapint i,int j,int[]arr{int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}另外,为了在交换方法中实现这一点,您将需要如下内容:void swapint i,int j,int[]arr{int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}