我想计算某个if语句的真实频率:
for (int i=0;i<10001;i++){
int min = 1;
int max = 6;
int dice1 = min + (int) (Math.random() * ((max - min) + 1));
int dice2 = min + (int) (Math.random() * ((max - min) + 1));
//System.out.println(dice1 + " and " + dice2);
if (dice1==dice2) {
System.out.println("yes");}
}
}
有了这个,我希望输出是一个整数(和),例如,它表示dice1和dice2输出的数字相同的次数。 提前致谢
答案 0 :(得分:3)
令人惊讶的是,要数数,你需要一个柜台;所以,让我提出一个反建议:
int counterOfTruth = 0;
for ...
if (...) {
...
counterOfTruth++;
}
}
print counterOfTruth;
并且,严肃地说:你会使用一个更有说服力的名字,比如“counterForIdenticalDiceThrows”。
答案 1 :(得分:3)
最小化代码污染的一种方法是定义计数器
int count = 0;
for
循环之前 ,然后写if (dice1 == dice2 && ++count > 0){
在这里,我正在利用&&
的短暂性质:count
仅在dice1 == dice2
时进行评估(并递增)。请注意,++count > 0
始终为true
,因此不会更改条件。
它不像在C或C ++中那样出色:在那些语言中你不需要笨重的> 0
,所以也许我的建议在Java中不像在C中那样惯用或者C ++。
答案 2 :(得分:1)
一个非常常见的技巧是在if语句中使用后增量运算符++
(在调用时向变量添加一个):
int count = 0;
for(int i = 0; i < 10001; i++){
// The rest of your code here!
if (dice1 == dice2){
System.out.println("yes");
count++;
}
}
System.out.println("The dice were equal " + count + " times.")
答案 3 :(得分:0)
您可以随时将公共代码移到循环之外,这称为循环不变代码,它在每次迭代中给出相同的值,如(max-min)+1。
此外,您可以将变量声明移到循环之外。
int min = 1;
int max = 6;
int dice1,dice2;
int counter = 0;
for(int i=0;i<10001;i++)
{
dice1 = min + (int) (Math.random() * ((max - min) + 1));
dice2 = min + (int) (Math.random() * ((max - min) + 1));
if(dice1==dice2)
{
counter ++;
System.out.println("yes");
}
}
System.out.println(counter);