我正在尝试为我正在做的小型演示文稿创建一个冒泡排序程序。代码运行正常,但我的数组中的最大整数永远不会显示。目前的计划输出是:
1
3
4
6
7
11
12失踪了!
这是我的代码,请原谅评论 - 其中一些甚至可能是错误的。
public class BubbleSort {
public static void main(String[] args) {
int number []={6,3,1,7,4,12,11};
// 0,1,2,3,4
//For temporarily storing a value that has to be swapped
int temp;
//Keeps the loop running until there is nothing left to sort.
boolean fixed=false;
while (fixed==false) {
fixed=true;
//If this IF statement is accessed it means something still has to be
//swapped, so at the end of the statement fixed is reverted to false
//again, so it can continue the loop.
for(int i=0; i<number.length-1 ; i++){
//This makes i start at 0 the first time it is run,
//this is due to the array starting at 0, too.
if(number[i] > number[i+1]) {
//If 8 > 5
temp = number[i+1];
//Store 5 in temporary variable
number[i+1]=number[i];
//Swap array 1 with array 0/
number[i]=temp;
fixed=false;
}
}
}
for(int i=0; i<number.length-1 ; i++){
System.out.println(number[i]);
}
}
}
答案 0 :(得分:3)
for(int i=0; i<number.length-1; i++){
System.out.println(number[i]);
}
应该是
// no '-1'
// V
for(int i = 0; i < number.length; i++) {
System.out.println(number[i]);
}
<强>为什么吗
让我们看看如果数组中有5个元素会发生什么,然后将它们编入索引如下:
0, 1, 2, 3, 4
如果我们使用i < 5-1
(或i < 4
),一旦i
变为4,则在循环的下一次迭代运行之前,它将停止,跳过最后一个索引。
如果上述内容没有解释,请注意for循环中发生事情的顺序:
这里最适用的部分是如果条件为假,循环迭代将永远不会运行。
答案 1 :(得分:2)
错误出现在显示数字的最后一个循环中。
你的循环没有到达最后一个元素,因为它在number.length-2
中停止。您必须在循环中再添加一个执行。
尝试:
for(int i=0; i<number.length ; i++){
System.out.println(number[i]);
}
或
for(int i=0; i<=number.length-1 ; i++){
System.out.println(number[i]);
}
答案 2 :(得分:0)
for(int i=0; i<number.length-1 ; i++){
System.out.println(number[i]);
打印数组时,请删除-1
仅写number.length
。
答案 3 :(得分:0)
你使用了错误的结束循环条件
for(int i=0;i<number.length;i++)
因为数组索引从0开始。