有人可以解释一下我下面给定程序中的 ++freq
是什么吗?
package array;
import java.util.Random;
public class CounterArray {
public static void main(String[] args){
Random Ran = new Random();
int freq[] = new int [7];
for(int roll=1;roll<100;roll++){
++freq[1+Ran.nextInt(6)];
}
System.out.println("face\tFrequency");
for(int face=1;face<freq.length;face++){
System.out.println(face+"\t"+freq[face]);
}
}
}
最佳答案
该程序的作用是“掷骰子”99 次(这听起来像是“差一”错误)并计算每个数字被发现的频率。数组freq
保持在i
位置多久一次i
被切丁了。
相关代码生成下一个随机数,然后递增数组中的相应槽。
++freq[1 + Ran.nextInt(6)];
如果我们把它拆开,就会变得更清楚。
- 首先,
Ran.nextInt(6)
进行评估,从集合 {0, 1, 2, 3, 4, 5} 中生成一个随机整数。对此添加 1 以获取集合 {1, 2, 3, 4, 5, 6} 中的一个数字。为了清楚起见,我们将这个中间结果存储在一个单独的变量中:int result = Ran.nextInt(6) + 1
. - 接下来,在数组中查找相应的频率并加一。
++freq[result]
与freq[result] += 1
具有相同的效果.
数组长度freq
设为 7,以便可以使用“自然”索引。即元素freq[0]
被浪费了。 (我怀疑这是不是很好的风格。)
关于风格的另一个词:普遍接受的做法是为类型保留大写名称而不将它们用于变量,因此 Ran
确实应该命名为ran
以避免混淆。
进一步补充:i++
中的后递增运算符之间的区别以及预自增运算符,如++i
是前一个表达式的结果是i
的值之前增量,后者是之后增量的值。就您而言,这没有什么区别,因为您无论如何都没有使用结果。要了解其工作原理,请尝试运行以下代码:
int i = 10;
System.out.printf("i = %d%n", i);
System.out.printf("i++ = %d%n", i++);
System.out.printf("i = %d%n", i);
System.out.printf("++i = %d%n", ++i);
System.out.printf("i = %d%n", i);
关于java - 我的 Java 数组中的增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27876814/