循环的Java功课建议

时间:2014-07-03 18:31:17

标签: java for-loop

这里我有一个学校辅导工作,而不是作业。

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);
}
}

这是关于我的工作的问题。

为什么tailsheads计数的总数不等于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++;
        }
    }

5 个答案:

答案 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() == 0firstCoin.coinToss() == 1时,这些是两个独立的投掷硬币实例,并且(平均而言)有25%的可能性无法增加t或h(如果你抛出1然后0 )