2017-10-06 91 views
-5

嗨,我在网上看到这个问题,我试图解决它,但我只是不明白答案是如何确定的。Java数组/循环

int[] n = {0, 1, 0, -1}; 

for (int i = 1; i < n.length; i++) { 
    if (n[i] == 0 && n[i - 1] != 0) { 
     int x = n[i - 1]; 
     n[i - 1] = n[i]; 
     n[i] = x;    
    }   
} 
System.out.println(n[2]); 

答案是1,我不知道如何或为何是1,不知道是否有人是一种足以解释为什么是答案1.先进的感谢。

+1

你认为它是什么? – Neo

+3

如果元素为零但前面的元素不为零,则交换元素。因此,交换的唯一元素是'i == 2'。 –

+0

我预计它将是0而不是1 –

回答

2

if内的代码块交换n[i]n[i - 1]中的两个数字。

if本身(条件)检查n[i]是否为零并且n[i - 1]为非零。

循环遍历从1到数组末尾的所有i值。

让我们按照循环运行,我们? (行号是i值)

  1. n[1]是1,n[0]是0 - 条件为假,而不是输入块if
  2. n[2]为0,n[1]为1-条件为true,并输入if块。现在n[2]是1,n[1]为0
  3. n[3]为-1,n[2]是1 - 条件为假,而不是进入if块。

数组末尾。

所以n[2]为1

+0

我会在每次迭代中添加数组值,使其更具视觉效果。 (就像循环中带有断点的调试器)。好的解释 – AxelH

+0

谢谢你正确的解释,我现在理解它背后的逻辑 –

0

数组从0开始。所以n [2]表示交换后的第三个元素。

交换后:{0,0,1,-1} So n [2] = 1。

0

It's很简单:

  • 您有4个元素的列表
  • 你去通过列表中,但第二个元素开始为指标下手0
  • 由于在第一次进入循环时你不会进入if条件,这次你进入if条件。
  • N [1]现在是1和n [I-1]是当前为0
  • 元素被换,因此n [i]是0,且n [I-1]为1
  • 因此答案是1
0
if (n[i] == 0 && n[i - 1] != 0) { 
     //Swapping elements i and i - 1 
     int x = n[i - 1]; 
     n[i - 1] = n[i]; 
     n[i] = x; 

当条件为真时的唯一情况发生当i = 2,因此 N [2] = N [1] = 1;