Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 2人掷硬币_Java_Random_Coin Flipping - Fatal编程技术网

Java 2人掷硬币

Java 2人掷硬币,java,random,coin-flipping,Java,Random,Coin Flipping,我正在尝试创建一个Java程序,该程序可以翻转两枚硬币,以查看谁在掷硬币中获胜。它会提示用户进行多次投币。如果第一个玩家有头,第二个玩家有尾,那么它应该输出“玩家1赢!”反之亦然。如果两个玩家都有正面或反面,那么它应该输出“平局”。最后,它应该记录每个玩家的赢数,并在所有投币完成后输出赢率。这感觉就像掷硬币的部分工作,但当它显示每个玩家的最终分数时,分数永远不会正确。有人发现什么不对劲吗 package coinflip; import java.util.Scanner; public c

我正在尝试创建一个Java程序,该程序可以翻转两枚硬币,以查看谁在掷硬币中获胜。它会提示用户进行多次投币。如果第一个玩家有头,第二个玩家有尾,那么它应该输出“玩家1赢!”反之亦然。如果两个玩家都有正面或反面,那么它应该输出“平局”。最后,它应该记录每个玩家的赢数,并在所有投币完成后输出赢率。这感觉就像掷硬币的部分工作,但当它显示每个玩家的最终分数时,分数永远不会正确。有人发现什么不对劲吗

package coinflip;

import java.util.Scanner;

public class CoinFlip {

    public static void main(String[] args) {
        int flips;
        int flipscount=0;
        int p1score=1;
        int p2score=1;

        Scanner scan = new Scanner(System.in);
        System.out.println("How many flips: ");
        flips=scan.nextInt();

        CoinMethods Coins = new CoinMethods();

        while (flipscount!=flips)
        {
            flipscount++;

            Coins.flip();

            System.out.println(""+Coins.result()+"");

            if (Coins.p1isHeads()&&Coins.p2isTails())
            p1score++;

            if (Coins.p1isTails()&&Coins.p2isHeads())
            p2score++;
        }

        System.out.println("Player 1 won "+p1score+" times!");
        System.out.println("Player 2 won "+p2score+" times!");
    }
}
CoinMethods
类如下所示:

package coinflip;

public class CoinMethods {

    private final int HEADS=0;
    private final int TAILS=1;
    private int p1face, p2face;

    public CoinMethods ()
    {
        flip();
    }

    public void flip()
    {
        p1face=(int) (Math.random()*2);
        p2face=(int) (Math.random()*2);
    }

    public boolean p1isHeads (){
        return p1face==HEADS;
    }

    public boolean p2isHeads (){
        return p2face==HEADS;
    }

    public boolean p1isTails (){
        return p1face==TAILS;
    }

    public boolean p2isTails (){
        return p2face==TAILS;
    }

    public String result()
    {
        String results;
        if (p1face==HEADS&&p2face==TAILS)
            {results="Player 1 wins!";
                }
        else
            if ((p1face==HEADS&&p2face==HEADS)||(p1face==TAILS&&p2face==TAILS))
            {results="Tie!";
               }
            else
            {results="Player 2 wins!";
                }

        return results;
    }
}

在我看来,您需要将分数初始化为零,而不是一:

int p1score=0;
int p2score=0;

只是一个一般性的评论:您的代码似乎相当冗长。我会有一个
Coin
类,它有一个
flip()
方法和一个布尔变量
isHeads
。然后制作两个
Coin
实例,
flip()
每一个,并比较
isHeads
变量。以什么方式“不正确”?玩家的分数不应该从0开始吗?如果你用一个布尔变量对硬币进行建模,问题会简化很多。不管怎么说,你是在假设一个无偏见的硬币,所以你不会失去任何东西。您可以将映射定义为“真”硬币表示头部,“假”硬币表示尾部。@安提古鲁他可以这样做,但正如乔恩所建议的那样,拥有一个
coin
类将是最明显的改进,实际上会产生更短、更好看的代码。@Voo当然,我的意思是coin变量实际上被封装在coin类中,保持了与现在相同的接口。哇,我感觉像是失败了。我想用第二双眼睛看东西会有帮助。非常感谢你抓住了这个机会^_^不客气,这就是他们建议结对编程的原因:-)