我的Java气泡排序算法从不停止排序,也不返回任何内容
我试图用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
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;
}