我的Java气泡排序算法从不停止排序,也不返回任何内容

我的Java气泡排序算法从不停止排序,也不返回任何内容,java,algorithm,sorting,Java,Algorithm,Sorting,我试图用Java制作一个冒泡排序算法,但是我的代码在应该排序的时候一直在运行,没有返回任何东西。当程序运行时,它会在排序之前打印数组,但是在排序之后不会发生任何事情,但程序不会停止,它会继续运行 package src; import java.util.Scanner; import java.util.Random; import java.util.ArrayList; import java.util.List; public class bubbleSort { publi

我试图用Java制作一个冒泡排序算法,但是我的代码在应该排序的时候一直在运行,没有返回任何东西。当程序运行时,它会在排序之前打印数组,但是在排序之后不会发生任何事情,但程序不会停止,它会继续运行

package src;
import java.util.Scanner;
import java.util.Random;
import java.util.ArrayList;
import java.util.List;

public class bubbleSort {

    public static void main(String[] args) {

        int length = getLength();

        List<Integer> randomList = createList(length);

        System.out.println("The list before sorting:\n" + randomList);

        List<Integer> newList = sortList(randomList, length);

        System.out.println("The list after sorting:\n" + newList);



    }

    public static int getLength() {
        System.out.println("Please enter how long you want the array to be");

        Scanner reader = new Scanner(System.in);

        int length = Integer.parseInt(reader.nextLine());

        return length;
    }

    public static List<Integer> createList(int length) {
        Random rand = new Random();

        List<Integer> randomList = new ArrayList<Integer>();

        for(int x = 0 ; x < length ; x++){
            int randomnumber = rand.nextInt((100 - 1) + 1) + 1;
            randomList.add(randomnumber);
        }

        return randomList;  
    }

    public static List<Integer> sortList(List<Integer> randomList, int length){
        boolean sorted = false;

        while(sorted == false){
            sorted = true;

            for(int x = 0 ; x < (length - 1) ; x++) {
                if(randomList.get(x) > randomList.get(x + 1)) {
                    sorted = false;
                    int temp = randomList.get(x + 1);
                    randomList.set((x + 1), (x));
                    randomList.set((x + 1), temp);
                }
            }
        }

        return randomList;
    }

}
包src;
导入java.util.Scanner;
导入java.util.Random;
导入java.util.ArrayList;
导入java.util.List;
公共类泡泡糖{
公共静态void main(字符串[]args){
int length=getLength();
List randomList=createList(长度);
System.out.println(“排序前的列表:\n”+随机列表);
List newList=sortList(随机列表,长度);
System.out.println(“排序后的列表:\n”+newList);
}
公共静态int getLength(){
System.out.println(“请输入您希望数组的长度”);
扫描仪阅读器=新扫描仪(System.in);
int length=Integer.parseInt(reader.nextLine());
返回长度;
}
公共静态列表createList(整数长度){
Random rand=新的Random();
List randomList=新建ArrayList();
对于(int x=0;xrandomList.get(x+1)){
排序=假;
int temp=randomList.get(x+1);
randomList.set((x+1),(x));
随机列表设置((x+1),温度);
}
}
}
返回随机列表;
}
}

创建一种交换方法,使其更清晰(对我们和您自己):

应用程序类。其目的是从用户处获取长度,创建测试数据,设置并调用BubbleSort实例:

public class Application {

    public static void main(String[] args) {

        int length = getLength();
        List<Integer> unsorted = createList(length);
        System.out.println("The list before sorting:\n" + unsorted);

        // creating an instance of the BubbleSort class
        BubbleSort bubbleSort = new BubbleSort(unsorted );        
        List<Integer> sorted = bubbleSort.sort();

        System.out.println("The list after sorting:\n" + sorted);
    } 

    private static int getLength() {
        System.out.println("Please enter how long you want the array to be");
        Scanner reader = new Scanner(System.in);
        return Integer.parseInt(reader.nextLine());
    }

    private static List<Integer> createList(int length) {
        Random rand = new Random();
        List<Integer> numbers = new ArrayList<Integer>();
        for(int x = 0 ; x < length ; x++){
            int randomnumber = rand.nextInt((100 - 1) + 1) + 1;
            numbers.add(randomnumber);
        }
        return numbers;   
    }
公共类应用程序{
公共静态void main(字符串[]args){
int length=getLength();
列表未排序=创建列表(长度);
System.out.println(“排序前的列表:\n”+未排序);
//创建BubbleSort类的实例
BubbleSort BubbleSort=新的BubbleSort(未排序);
List sorted=bubbleSort.sort();
System.out.println(“排序后的列表:\n”+已排序);
} 
私有静态int getLength(){
System.out.println(“请输入您希望数组的长度”);
扫描仪阅读器=新扫描仪(System.in);
返回Integer.parseInt(reader.nextLine());
}
私有静态列表createList(整数长度){
Random rand=新的Random();
列表编号=新的ArrayList();
对于(int x=0;x

顺便说一句,把那些方法分开很好。
getLength
createList
。这是正确的想法。

你犯了几个错误

这:

randomList.set((x + 1), (x));
randomList.set((x + 1), temp);
应该是:

randomList.set((x + 1), randomList.get(x));
randomList.set((x), temp);
完整方法:

public static List<Integer> sortList(List<Integer> randomList, int length){
    boolean sorted = false;

    while(sorted == false){
        sorted = true;

        for(int x = 0 ; x < (length - 1) ; x++) {
            if(randomList.get(x) > randomList.get(x + 1)) {
                sorted = false;
                int temp = randomList.get(x + 1);
                randomList.set((x + 1), randomList.get(x));
                randomList.set((x), temp);
            }
        }
    }

    return randomList;
}
公共静态列表排序列表(列表随机列表,整数长度){
布尔排序=假;
while(排序==false){
排序=真;
对于(int x=0;x<(长度-1);x++){
if(randomList.get(x)>randomList.get(x+1)){
排序=假;
int temp=randomList.get(x+1);
randomList.set((x+1),randomList.get(x));
随机列表设置((x),温度);
}
}
}
返回随机列表;
}

randomList.set((x+1),(x));
这不应该是
randomList.set((x+1),randomList.get(x));
这是为了什么:while(sorted==false){sorted=true;?检查交换代码,它不正确。int temp=randomList.get(x+1);randomList.set((x+1),(x));randomList.set((x+1),temp);其中一个
randomList.set(x+1,…);
应该是
randomList.set(x,…)考虑创建一个<代码>掉期< /代码>方法。让你的代码对你自己更可读。看一看如何在将来为你自己解决这样的问题。正确答案的下注是什么?我只是纠正了他的错误……除了最后一个以外,没有什么能理解你所有的建议,怎么办?你的意思是创建一个实例,字段是什么?抱歉,如果他们是愚蠢的问题,你可以在下面的代码示例中看到这一点。
私有列表编号;
是任何BubbleSort实例的字段。静态main方法通过执行
新建BubbleSort(未排序)
创建对象的优点(实例)就是你得到了更多的封装。如果你所有的代码都是静态的,那么分离关注点或创建可读(和可测试!)的代码就变得更加困难。静态代码在本质上很容易是“过程性”的,并且放弃了面向对象编程的优点。
randomList.set((x + 1), randomList.get(x));
randomList.set((x), temp);
public static List<Integer> sortList(List<Integer> randomList, int length){
    boolean sorted = false;

    while(sorted == false){
        sorted = true;

        for(int x = 0 ; x < (length - 1) ; x++) {
            if(randomList.get(x) > randomList.get(x + 1)) {
                sorted = false;
                int temp = randomList.get(x + 1);
                randomList.set((x + 1), randomList.get(x));
                randomList.set((x), temp);
            }
        }
    }

    return randomList;
}