我的Java数组中的增量

新手程序员

有人可以++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]);
         }
     }
}
5gon12eder

该程序的作用是将骰子“掷骰子” 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章