这里我有一个学校辅导工作,而不是作业。
import java.lang.Math;
class Coin {
private boolean coinSide;
String headSide = "heads";
String tailSide = "tails";
Coin()
{
coinSide = true;
}
public boolean getCoinside()
{
return coinSide;
}
public int coinToss()
{
int num = (int)(Math.random() *2); //returns an integer
return num;
}
}
接下来将是我的TestCoin.java编码:
class TestCoin {
public static void main (String [] args)
{
Coin firstCoin = new Coin();
int[] tosses = new int[100];
int h = 0;
int t = 0;
for(int counter = 0; counter != tosses.length; counter++)
{
if(firstCoin.coinToss() == 0)
{
System.out.println("Tails");
tosses[counter] = 0;
t++;
} else if(firstCoin.coinToss() == 1)
{
System.out.println("Heads");
tosses[counter] = 1;
h++;
}
}
System.out.println("Number of tails tosses: " + t);
System.out.println("Number of heads tosses: " + h);
}
}
这是关于我的工作的问题。
tails
和heads
计数的总数不等于100
?谢谢你们纠正我的错误!我决定只编辑我的for循环。
for(int counter = 0; counter != tosses.length; counter++)
{
if(firstCoin.coinToss() == 0)
{
System.out.println("Tails");
tosses[counter] = 0;
t++;
} else
{
System.out.println("Heads");
tosses[counter] = 1;
h++;
}
}
答案 0 :(得分:4)
你必须只调用一次coinToss()!
int value = firstCoin.coinToss();
if(value == 0)
{
System.out.println("Tails");
tosses[counter] = 0;
t++;
} else if(value == 1)
{
System.out.println("Heads");
tosses[counter] = 1;
h++;
}
答案 1 :(得分:3)
coinToss()
会生成一个随机数,这意味着每次调用它都会返回不同的结果。所以这段代码没有做你认为会做的事情:
if(firstCoin.coinToss() == 0)
// code
{
} else if(firstCoin.coinToss() == 1)
// code
{
}
第一个if
调用coinToss
,返回0或1.假设它返回1.然后if
失败,因此您可以转到else if
。现在它必须评估这个:
} else if(firstCoin.coinToss() == 1)
您认为这总是true
,因为coinToss
已经返回1吗?不,因为会再次调用coinToss
。新coinToss
可能会返回0,因为它是随机的。这就是事情不能累积的原因。
在这种情况下,您可以在没有第二个else
的情况下说if
。但一般来说,在这种情况下,您应该声明一个新变量来保存coinToss
的结果或您正在调用的其他任何函数,这样您就可以确保只在您调用时调用一次只想打电话一次。
答案 2 :(得分:2)
鉴于.coinToss()
每次调用时都会生成一个新数字。
if(firstCoin.coinToss() == 0) // can return 0 or 1
{
// whatever
}
else if(firstCoin.coinToss() == 1) // can return 0 or 1 ( a different result than the if branch )
{
// whatever
}
这并不是你想做的事。
if((int)(Math.random() *2) == 0)
{
// whatever
} else if((int)(Math.random() *2) == 1)
{
// whatever
}
有一种情况是if
没有匹配且else
没有匹配,没有任何操作。
final int toss = first.Coin.coinToss();
if(toss == 0)
{
// whatever
}
else if(toss == 1)
{
// whatever
}
答案 3 :(得分:2)
您在firstCoin对象上调用了coinToss方法两次。当代码检查if和else if语句时,if和else if语句将分别执行coinToss方法。
例如,对于第一个if语句,您可能得到1的值,但是当您在else if语句上再次调用它时,您可以获得值0。
试试这个:
for(int counter = 0; counter != tosses.length; counter++)
{
int coinTossed = firstCoin.coinToss();
if(coinTossed == 0)
{
System.out.println("Tails");
tosses[counter] = 0;
t++;
} else if(coinTossed == 1)
{
System.out.println("Heads");
tosses[counter] = 1;
h++;
}
}
头部和尾部计数不会达到100,因为当两个if语句都没有执行时可能有一个实例!因此,t或h都没有添加任何内容。
希望它有所帮助!
答案 4 :(得分:1)
if(firstCoin.coinToss() == 0) {
System.out.println("Tails");
tosses[counter] = 0;
t++;
} else if(firstCoin.coinToss() == 1) {
System.out.println("Heads");
tosses[counter] = 1;
h++;
}
问题出在这里。当你执行firstCoin.coinToss() == 0
和firstCoin.coinToss() == 1
时,这些是两个独立的投掷硬币实例,并且(平均而言)有25%的可能性无法增加t或h(如果你抛出1然后0 )