有人可以纠正我理解这段代码的方式,因为输出与我的想法不同吗?

时间:2012-11-07 00:12:01

标签: java output

public class Test{
   public static void main(String[] args){
      int[] a = {3, 2, 5, 21}; // created an array with 4 elements
      int b,c;

      for (b=0; b<=2; b++)//for loop that will have 3 iterations  
      {
        if (a[b] < a[b+1])
        {
           c=a[b];//this
           a[b] = a[b+1];//is 
           a[b+1] = c;//swapping
        }
      }

      for(b=0; b<4; b++)
      {
        System.out.println(a[b]);
      }
   }
}

输出:

  

3
5
21
2

当我写下来时我得到了什么:

  

3
5
21
21

有人可以告诉我如何在我的想法中接近它吗?

4 个答案:

答案 0 :(得分:3)

如果你真的想要追踪程序,你可以手动循环第一个for的每次迭代(第二个循环只打印a的内容。)

在循环开始之前,a成立

{3, 2, 5, 21}

第一次迭代(b = 0):
a[0] 小于a[1],所以我们什么都不做。


第二次迭代(b = 1):
a[1] 小于a[2],因此我们将它们互换。现在a持有

{3, 5, 2, 21}

第三次迭代(b = 2):
a[2] 小于a[3],因此我们将它们互换。现在a持有

{3, 5, 21, 2}

随后将被打印出来。

答案 1 :(得分:1)

嗯,代码总是输出a的初始元素,可能是置换的。因此,您的期望可能不正确,因为它丢失2并使21出现两次。

答案 2 :(得分:1)

你在第3次迭代中输了,所以我会从那里开始。

数组为{3, 5, 2, 21}b = 2

if (a[b] < a[b+1])相当于if (2 < 21),这是true,所以......

c=a[b];//this - &gt; c = 2

a[b] = a[b+1];//is - &gt; a[2] = 21

a[b+1] = c;//swapping - &gt; a[2+1] = 2

现在a[2] = 21a[3] = 2,最后一个数组是:

{3, 5, 21, 2}

答案 3 :(得分:0)

每次运行完整的外部循环时,最终会得到数组末尾的下一个最小元素。因此,当您在数组末尾以2(作为第一个最小元素)结束时,您只运行循环。

正如其他人所提到的,如果你想让它完整排序,那么你需要更多的主循环迭代来完成排序(n-1,其中n是数组的长度,所以在这种情况下你会需要运行循环3次)。