为什么条件为假,for循环仍为什么运行

时间:2018-12-14 22:39:45

标签: java trace

我一直在尝试为此程序编写代码跟踪。经过多次尝试,我以为我理解了,但现在我又跌跌撞撞了。

在for循环i=counter中,由于i=0counter=0,所以既然它必须小于计数器,那么该代码甚至如何运行?

我在下面包括了我不完整的代码跟踪。

该程序的目的是在10到5的行中打印1到999之间的50个唯一随机数。该程序运行完美。我只想弄清楚它如何在代码跟踪的帮助下工作。我知道这对您来说可能是一个简单的问题,但我正在努力解决。您能帮我吗,谢谢。

import java.util.Random;

public class Random50 {

    public static void main(String[] args) {

        int numbersNeeded = 50;
        int[] randomNumbers = new int[numbersNeeded];
        int counter = 0;
        Random randomGenerator = new Random();
        int max = 999;
        int min = 1;

        while (counter < numbersNeeded) {

            int generated = min + randomGenerator.nextInt(max);

            boolean found = false;
            for (int i = 0; i < counter && !found; i++) {

                if (randomNumbers[i] == generated) {

                    found = true;

                }

            }

            if (!found) {

                randomNumbers[counter++] = generated;

            }

        }

        for (int i = 0; i < counter; i++) {

            System.out.printf("%03d ",randomNumbers[i] );

            if (i > 0 && (i+1) % 5 == 0) {

                System.out.println("");

            }

        }
    }
}

Code trace

1 个答案:

答案 0 :(得分:0)

此行是原因:

randomNumbers[counter++] = generated;

通过使用counter++,您正在使用++后缀增量运算符,该运算符的取值为counter,但在求值后将其递增1。不使用此运算符的等效代码如下所示:

randomNumbers[counter] = generated;
counter = counter + 1;

因此,在执行此行的第一次迭代中,randomNumbers[0]被更新,但随后counter被设置为1(因为0 + 1 = 1)。在第二次迭代中,randomNumbers[1]被更新,然后counter被更新为2(因为1 +1 = 2)……等等。

您可以在这里找到有关算术运算符的更多信息:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html