Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays number.length-1在数组中,"-1“;代表_Arrays_Sorting - Fatal编程技术网

Arrays number.length-1在数组中,"-1“;代表

Arrays number.length-1在数组中,"-1“;代表,arrays,sorting,Arrays,Sorting,我对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 = t

我对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 ));
  }
}
导入java.util.array;
公共类泡泡糖{
公共静态void main(字符串[]args){
int[]数={5,16,4,32,30};
int j;
boolean flag=true;//将flag设置为true开始第一次传递
int temp;//保持变量
while(旗帜)
{
flag=false;//将flag设置为false,等待可能的交换
对于(j=0;j编号[j+1])//将升序排序更改为>
{
temp=number[j];//交换元素
数字[j]=数字[j+1];
编号[j+1]=温度;
flag=true;//显示发生了交换
}
}
}
System.out.println(Arrays.toString(number));
}
}

如果数组的长度为
n
,那么它的第一个元素位于索引
0
,最后一个元素位于索引
n-1

你需要从数组的长度中删除1才能得到最后一个元素,因为数组是基于0的,但长度是基于1的。

字面意思是,
number.length
subtract
1

数组的值是“基于零的”,这意味着第一个项目位于位置号0(0)中


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

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

它允许
j
0
运行到
number.length-1


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

因为您使用的是循环from 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)

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


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

我的答案确实解释了:)@hvd:是的,对不起,你在我写我的时候发表了这篇文章。不管怎样,吸引更多的注意力是好的,我认为你的答案可能比我的更好。你的答案在技术上是正确的,但是它没有解释为什么在问题中使用它(j=0;j@Tim:我想这取决于你对OP问题的解释。我不同意。需要
-1
的唯一原因是
j+1
被用作索引,你没有提到,但其他人提到了。我同意不同意。这就是为什么我不编辑我的答案。有足够的答案超出了范围(在我看来)这个问题的答案就是-1.)
for (j=0; j<number.length; j++)
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