我一直在尝试为此程序编写代码跟踪。经过多次尝试,我以为我理解了,但现在我又跌跌撞撞了。
在for循环i=counter
中,由于i=0
和counter=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("");
}
}
}
}
答案 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