java - 我的 Java 数组中的增量

标签 java loops

有人可以解释一下我下面给定程序中的 ++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/

相关文章:

java - 我应该使用什么 GUI 框架?

python - 使用 Python 和 BeautifulSoup 从 XML 文件创建字典

r - 将脚本重复应用于 R 中的 n 个 .csv 文件的最佳方法是什么?

java - Java中,为什么方法参数中的Object类对象不能接受null

java - java中构造函数的作用是什么

java - 原始类型和子类型

java - 为不同的公众构建相同的 Android 应用程序的最佳方法是什么?

Javascript计算每个组合循环

python - Biopython 的 SeqIO.parse 在第一次迭代后停止解析。为什么?这是我安装的问题吗?

python - 在Python中按文本列表中的值过滤