我是Java的新手。我从一个网站得到这个,它确实是bubblesort。我想知道为什么“number.length”之后会出现“-1”。我只是不太明白。如果有人能提供帮助,我会感激不尽。
import java.util.Arrays;
public class Bubblesort {
public static void main(String[] args) {
int[] number = {5,16,4,32,30};
int j;
boolean flag = true; // set flag to true to begin first pass
int temp; //holding variable
while ( flag )
{
flag= false; //set flag to false awaiting a possible swap
for( j=0; j <number.length-1; j++ )
{
if ( number[ j ] > number[j+1] ) // change to > for ascending sort
{
temp = number[ j ]; //swap elements
number[ j ] = number[ j+1 ];
number[ j+1 ] = temp;
flag = true; //shows a swap occurred
}
}
}
System.out.println(Arrays.toString( number ));
}
}
答案 0 :(得分:2)
数组是“从零开始”的,这意味着第一个项目的位置编号为零(0)。
如果你有5个项目,那么这就是它的样子:Slot: [0] [1] [2] [3] [4]
,所以你从0开始,然后转到长度(5)减1。
答案 1 :(得分:2)
其他大多数答案都没有具体回答为什么它在这个算法中完成了。是的,number.length-1
是数组number
中的最后一个索引。但通常,在for
循环中遍历数组j < number.length
的所有元素将是循环的良好结束条件,因为它会在j
到达时停止并且不执行循环体number.length
。
在这种情况下,该算法稍后会将number[ j ]
与number[ j+1 ]
进行比较。这就是为什么循环需要以最后一个索引之下的j
一个值停止的原因。
答案 2 :(得分:1)
要直接回答这个问题,number.length-1
表示“从number.length
中减去1。但是要稍微扩展它在代码中的使用方式:
for( j=0; j <number.length-1; j++ )
通常,要让j
从第一个有效索引运行到最后一个,它看起来像
for (j=0; j<number.length; j++)
允许j
从0
运行到number.length - 1
。
然而,您要求的代码实现的算法会减去一个,因为它会查看除最后一个之外的所有元素。对于每个元素,它会查看该元素和下一个元素。它必须跳过最后一个元素,因为最后一个元素没有下一个元素。
答案 3 :(得分:0)
如果数组的长度为n
,则其第一个元素位于索引0
,其最后一个元素位于索引n-1
。
答案 4 :(得分:0)
您需要从数组的长度中删除1以获取最后一个元素,因为数组是从0开始的,但长度是从1开始的。
答案 5 :(得分:0)
从字面上看,number.length
的值减去1
。
答案 6 :(得分:0)
因为您使用的是来自j = 0
的循环5个元素的数组具有从0到4的索引
int[] arr = new int[5];
arr[0] first element
arr[1] second element
arr[2] third element
arr[3] fourth element
arr[4] fifth element
如果你做arr.length(),它将给出5
所以在循环中我们做0到(arr.length() - 1)