java - 2 人掷硬币

标签 java random coin-flipping

我正在尝试创建一个 Java 程序来掷两枚硬币,看看谁赢了掷硬币。它提示用户进行多次抛硬币。如果第一个玩家正面,第二个玩家反面,那么它应该输出“Player 1 Wins!”反之亦然。如果两个玩家都有正面或反面,那么它应该输出“Tie.”。最后,它应该跟踪每个玩家的获胜次数,并在抛完所有硬币后输出获胜率。感觉抛硬币部分是可以的,但是当它显示每个玩家的最终分数时,分数总是不对。谁能找出问题所在?

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;

关于java - 2 人掷硬币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994048/

相关文章:

java - 如何解析 "Thu, 8 Dece 2016 09:54:00 GMT"和月份中额外的 'e' ?

java - 是否可以暂停正在运行的 Java 应用程序,修复问题,重新编译它,然后从暂停的地方运行它?

java - 文件在对象创建时自行清除

c++ - 给每个给定的自然数分配一个随机自然数

java - 如何在Hibernate注释中指定char列的大小?

random - 顽固的测试只有整数?

algorithm - 理解寻找随机数的算法

抛硬币程序问题,C 编程

java - 抛硬币程序

r - 模拟抛硬币一周?