Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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
Java 理解列表[i-1]与列表[i]-1_Java_Arrays_List_Variables - Fatal编程技术网

Java 理解列表[i-1]与列表[i]-1

Java 理解列表[i-1]与列表[i]-1,java,arrays,list,variables,Java,Arrays,List,Variables,希望这是一个我无法理解的简单答案。完整代码是 public static void mystery(int[] list) { for( int i = list.length - 1; i>1; i --) { if (list[i] > list[i - 1]) { list[i -1] = list[i] - 2; list[i]++; } } } }

希望这是一个我无法理解的简单答案。完整代码是

public static void mystery(int[] list) {
       for( int i = list.length - 1; i>1; i --) {
           if (list[i] > list[i - 1]) {
               list[i -1] = list[i] - 2;
               list[i]++;
            }
    }
}
}

and lets say we are using a list of [2,3,4].
我知道它将输出2,2,5,但我不清楚如何实际完成它。我知道这里的list.length是3,我知道for循环只运行一次,但我不清楚list[I-1]=list[I]-2时会发生什么;地区应该是列表[2-1]=列表[2]-2吗?这两个在括号外的人对它有什么不同的影响


非常感谢

代码非常简单:

if (list[i] > list[i - 1]) 
上面的一行将列表中的当前元素(老实说,它是一个数组,不是一个列表,但请遵守命名约定)与其前一个元素进行比较。考虑到您的示例输入,它会比较
4>3
,如果它大于上一个元素(并且是),它会从上一个元素中减去2,并向当前元素添加1

list[i -1] = list[i] - 2; // list[2-1]=4-2     ->  list[1]=2
list[i]++;  //list[2]=list[2]+1                ->  list[2]= 4+1 = 5 
在第一次迭代之后,你可以说最后一个数字是5,最后一个数字是2。下一次迭代检查条件
2>2
。它为false,没有任何更改,因此结果数组[2,2,5]


请注意,循环从列表的末尾到开头

list[i-1]
在i之前获取(或设置)元素1<代码>列表[1]-1获取i处的元素并减去1。它读起来差不多。list[i-1]=list[i]-2;这不是平等。它将列表[i]-2转换为列表[i-1]。谢谢大家,凭借你们的提示和耐心,我刚刚突破了众所周知的“障碍”。我现在觉得很傻。