我是java的新手。我正在阅读一些教程并遇到这些代码我无法理解代码。请解释它的含义。
class Randoms
{
public static void main(String[] args)
{
Random rand = new Random();
int freq[] = new int[7];
for(int roll = 1; roll < 10; roll++)
{
(++freq[1 + rand.nextInt(6)]);
}
...
答案 0 :(得分:4)
逐行:
Random rand = new Random();
创建Random对象的新实例,负责创建随机数。
int[] freq = new int[7];
创建一个新的int数组,可以存储7个元素,索引从0到6。值得注意的是,在Java
中,存储在数组中的整数被初始化为0
。 (对于所有语言都不是这样,例如C
,如C
int数组最初存储内存垃圾数据,并且必须显式初始化为零)。
for(int roll = 1; roll < 10; roll++)
这次翻了9次(因为1 ... 9,但从0开始是更好的做法)
(++freq[1 + rand.nextInt(6)]);
这条线是你不应该以这种方式做的事情,因为它是你所看到的怪物。
做这样的事情:
for(int roll = 0; roll < 9; roll++)
{
int randomNumber = rand.nextInt(6); //number between 0...5
int index = 1 + randomNumber; //number between 1...6
freq[index]++; //increment the number specified by the index by 1
//nearly equivalent to freq[index] += 1;
}
所以基本上它随机化9个骰子投掷的数量,并在数组中存储骰子投掷计数(或者它称之为频率)。
因此,它模拟9个骰子投掷(数字从1 ... 6),每次它&#34;滚动&#34;一个特定的数字,它增加了在该特定位置的数组中存储的数字。
所以最后,如果你说:
for(int i = 1; i <= 6; i++)
{
System.out.println("Thrown " + freq[i] + " times of number " + i);
}
然后会清楚地看到发生了什么。
答案 1 :(得分:1)
(++freq[1 + rand.nextInt(6)]); // this line of code.
上面的代码行是在指定的位置预先递增freq []数组的值,即1+rand.nextInt(6)
---引用的值是++ freq [某个要评估的位置]我们将在下面评估。
这个rand.nextInt(6)将生成一个小于6且大于0的整数,因为它是Random Class
的预定义方法,是随机的。我们无法预测它。
然后,说生成的数字是4. SO,1 + rand.nextInt(6)= 5.
因此,您的代码将简化为(++freq[1 + rand.nextInt(6)])
或`(++ freq [5])。
因此,此代码的简化将等同于等于1 more than 6th element of array freq[]
的数字。
// as freq[5] is the 6th element of the array freq[].
此外, SIR David Wallace
还有其他一些建议我要包括哪些内容,我想再解释一下。它如下: -
++a
这里++
被称为预增量运算符,它将a的值增加1.还存在一个改变的反向版本。
a++
此处++
被称为后增量运算符,它还会将a的值增加1.但是, WAIT ,您可能已经想到了没有差异,但有。
对于差异药水,我想建议阅读What is the difference between pre-increment and post-increment in the cycle (for/while)?,虽然它在C ++方面受到质疑,但同样在Java中也是如此!
答案 2 :(得分:1)
// Create a new Random Object, this helps you generate random numbers
Random rand = new Random();
// create a integer array with 7 integers
int freq[] = new int[7];
// loop 9 times
for(int roll = 1; roll < 10; roll++)
{
// rand.nextInt(6) generates a number between 0 and 5 (<6). add one to it
// ++ adds one to the integer in the array that is at the index of 1-6.
(++freq[1 + rand.nextInt(6)]);
}
关于此代码的一些奇怪的事情:
++
通常位于右侧,可能会导致新程序员之间的混淆。freq[1 + rand.nextInt(6)]
导致永远不会使用freq[0]
。答案 3 :(得分:1)
首先创建一个Random-Class的新对象和一个包含7个元素的数组。数组的每个元素的值都为0.在for循环中,你随机选择数组的第2到第7个元素并将其当前值增加1.这样做了9次。
您的代码永远不会选择索引为0的数组的第一个元素。
我会重写代码以使其更清晰:
Random rand = new Random();
int freq[] = new int[6];
int randomIndex = 0;
for(int roll = 0; roll < 9; ++roll)
{
randomIndex = rand.nextInt(6);
freq[randomIndex] = freq[randomIndex] + 1;
}
此代码尚未经过测试,但基本上应该这样做。