2

我对 Java 很陌生。我从一个网站上得到了这个,它可以进行冒泡排序。我想知道为什么“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 ));
  }
}
4

7 回答 7

3

数组是“从零开始的”,这意味着第一项位于位置编号零 (0)。

如果您有 5 个项目,那么这就是它的样子:Slot: [0] [1] [2] [3] [4],因此您从零开始,然后将长度 (5) 减一。

于 2013-10-05T09:55:54.097 回答
2

直接回答这个问题,number.length-1意思是“从 中减去 1。number.length但是稍微扩展一下它在代码中的使用方式:

for( j=0;  j <number.length-1;  j++ )

通常,j要从第一个有效索引运行到最后一个,它看起来像

for (j=0; j<number.length; j++)

让我们j0to运行number.length - 1

但是,您询问的代码实现的算法会减去一个,因为它会查看除最后一个元素之外的每个元素。对于每个元素,它会查看该元素和下一个元素。它必须跳过最后一个元素,因为最后一个元素没有下一个元素。

于 2013-10-05T09:57:58.177 回答
2

大多数其他答案都没有具体回答为什么在这个算法中这样做。是的,number.length-1是数组中的最后一个索引number。但是通常,在for循环中遍历数组的所有元素对于循环来说是一个很好的结束条件,因为一旦到达j < number.length它就会停止并且不执行循环体。jnumber.length

但在这种情况下,该算法稍后会与 进行number[ j ]比较number[ j+1 ]。这就是为什么循环需要以j低于最后一个索引的值停止的原因。

于 2013-10-05T10:00:33.453 回答
0

如果数组有长度n,那么它的第一个元素在 index 处0,最后一个元素在 index 处n-1

于 2013-10-05T09:54:01.317 回答
0

您需要从数组的长度中删除 1 以获取最后一个元素,因为数组是从 0 开始的,但长度是从 1 开始的。

于 2013-10-05T09:54:09.787 回答
0

它的字面意思是number.length减法的值1

于 2013-10-05T09:54:10.363 回答
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)

于 2013-10-05T09:58:07.463 回答