有人可以++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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句