Arrays number.length-1在数组中,"-1“;代表
我对Java非常陌生。这是我从一个网站上得到的,它做的是泡泡运动。我想知道为什么在“number.length”后面有“-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
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
subtract1
数组的值是“基于零的”,这意味着第一个项目位于位置号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