package com.zhang.day3;import java.util.Arrays;public class TestBubbleDemo {
public static void main(String[] args) {
int[] array = {1, 7, 3, 0, 8,2,5,9,4};
System.out.println(Arrays.toString(array));
bubble(array);
System.out.println(Arrays.toString(array));
}

public static void bubble(int[] array){
for (int i = 0; i < array.length - 1; i++) {
boolean flag = true;
for (int j = array.length - 1; j > i; j--) {
System.out.println(j);
swep(array[j - 1], array[j]);
flag = false;
}
if(flag)return;
}
}

public static void swep(int number1, int number2){
if(number1 > number2){
int temp;
temp = number1;
number1 = number2;
number2 = temp;
}
}
}问下为什么将交换的判断条件number1>number2放在swep函数中,在bubble函数中调用它时它不能达到交换的结果啊,求教啊啊,在线坐等大神啊

解决方案 »

  1.   

    我看是传值的问题,swep(int number1,int number2)
    在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。
      

  2.   

    直接在bubble里判断就行。import java.util.Arrays;public class TestBubbleDemo
    {
    public static void main(String[] args) 
    {
    int[] array = {1, 7, 3, 0, 8,2,5,9,4};
    System.out.println(Arrays.toString(array));
    bubble(array);
    System.out.println(Arrays.toString(array));
    }

    public static void bubble(int[] array)
    {
    for (int i = 0; i < array.length - 1; i++)
    {
    for (int j = array.length - 1; j > i; j--) 
    {
    System.out.println(j);
    if(array[j-1]>array[j])
    {
    int temp=array[j-1];
    array[j-1]=array[j];
    array[j]=temp;
    }
    }
    }
    }
    }
      

  3.   

    楼主如果非要将交换位置写成一个方法的话 最好传的是数组的下标。这样的话才能达到要求我测试过了
    import java.util.Arrays;public class TestBubbleDemo {
    public static void main(String[] args) {
    int[] array = { 1, 7, 3, 0, 8, 2, 5, 9, 4 };
    System.out.println(Arrays.toString(array));
    bubble(array);
    System.out.println(Arrays.toString(array));
    } public static void bubble(int[] array) {
    for (int i = 0; i < array.length - 1; i++) {
    boolean flag = true;
    for (int j = array.length - 1; j > i; j--) {
    System.out.println(j);
    swep(array, j - 1, j);//串的是数组的下标
    flag = false;
    }
    if (flag)
    return;
    }
    }
    public static void swep(int[] a, int number1, int number2) { if (a[number1] > a[number2]) {
    int temp;
    temp = a[number1];
    a[number1] = a[number2];
    a[number2] = temp;
    }
    }
    }
      

  4.   

    楼主,这个其实是Java的设计者的思路,涉及到享元模式、栈内存、堆内存、引用、基本类型的设计模式等许多知识,如果对这个问题想追根溯源,加我QQ 422766572 给你解释哈
    如果就想会简单的应用,不需要知道原理,在程序中跑不会报错,那遵循大学里面那些SB老师教授的所谓的“传值传引用”理论就可以。
      

  5.   

    +1
    另外,楼主函数名是想起swap吧
      

  6.   

    [Quote=引用 2 楼  的回复:]引用 2 楼  的回复:
    我看是传值的问题,swep(int number1,int number2)
    在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。+1    值传递和引用传递问题.
      

  7.   

    import java.util.Arrays;public class TestBubbleDemo {
        
        public static void main(String[] args) {
            int[] array = {1, 7, 3, 0, 8, 2, 5, 9, 4};
            System.out.println(Arrays.toString(array));
            bubble(array);
            System.out.println(Arrays.toString(array));
        }
        
        public static void bubble(int[] array) {
            for (int i = 0; i < array.length - 1; i++) {
                boolean flag = true;
                for (int j = array.length - 1; j > i; j--) {
                    System.out.println(j);
                    array[j - 1] = array[j - 1] ^ array[j];
                    array[j] = array[j] ^ array[j - 1];
                    array[j - 1] = array[j - 1] ^ array[j];
                    flag = false;
                }
                if (flag) {
                    return;
                }
            }
        }
    }swep多余的, 直接换位就可以了, 交流一下~