【问题标题】:Why this for loop of array uses newARRAY.length-1?为什么这个for循环数组使用newARRAY.length-1?
【发布时间】:2019-10-05 06:49:59
【问题描述】:

你好我是java的初学者现在我已经到了数组这里是一个for循环从高到低对数字进行排序,我的问题是为什么教练使用

newARRAY.length-1

?

public static int [] integers;

public static int [] sortArray(int[] array){
    boolean PeaceArray = true;
    int temp;
    int [] newARRAY = Arrays.copyOf(array,array.length);
    while(PeaceArray){
        PeaceArray = false;
        for(int i=0;i<newARRAY.length-1;i++){
            if(newARRAY[i]< newARRAY[i+1]){
                temp = newARRAY[i];
                newARRAY[i] = newARRAY[i+1];
                newARRAY[i+1] = temp;
                PeaceArray = true;

            }


        }


    }

    return newARRAY;
}

【问题讨论】:

  • 您是否尝试将i 的所有值替换为newARRAY[i+1]
  • @SotiriosDelimanolis 我不明白你的意思
  • @Abdelillah 尝试将 newARRAY.length-1 更改为其他内容,看看运行时会发生什么。
  • i 位于最后一个索引时,i+1 将越界。
  • 您希望您的讲师使用哪些其他值,您为什么会这样?如果你回答newARRAY.length,没有-1,那么当你回答newARRAY[i+1] 时,你认为i 的最高值会发生什么,你为什么这么认为?

标签: java arrays sorting for-loop arraylist


【解决方案1】:

通常java数组的第一个索引从零(0)开始,但长度属性 数组给出了数组的实际计数。

例如,考虑以下整数数组:

int[] numbers = {40, 55, 63, 17, 22, 68, 89, 97, 89}

这个数组也可以用图形表示,如下图

所以如果我们要为这个数组运行一个循环,比如:

for(int i=0; i<numbers.length; i++){
   //this loop runs 9 times
}

我上面的循环i被初始化为0并且i可以达到的最大值是8但是循环将运行9次因为如果你从0一直计数到@ 987654330@你得到9

但是如果你像这样运行一个循环

for(int i=0; i<numbers.length-1; i++){
   //this loop runs 8 times
}

循环将运行 8 次,但 i 可以达到的最大值是 7

您的教师使用newARRAY.length-1 是因为他不希望i 的最大值超过the immediate lower number following newARRAY.length-1,因为他使用i+1 的值来索引代码中某处的数组newArray

如果他没有在代码中使用newARRAY.length-1,当i 达到最大值时,newARRAY[i+1] 会给出IndexOutOfbounds 错误,因为会超出newARRAY 的最后一个索引,因为的1 他添加到i 以访问newARRAY

希望你明白这一点。

【讨论】:

    【解决方案2】:

    数组以 0 开始索引

    例如: int a[]={1,2,3,4,5}; 然后 a.length=5 但 a[5] 不存在于数组中

    a[0]=1

    a[1]=2

    a[2]=3

    a[3]=4

    a[4]=5

    出于这个原因,我们使用 a.length-1 而不是 a.length

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2013-12-13
      相关资源
      最近更新 更多