2 枚のコインを投げて誰がコイン投げに勝つかを確認する Java プログラムを作成しようとしています。これは、ユーザーにコイントスの回数を要求します。最初のプレーヤーが表で、2 番目のプレーヤーが裏の場合、「Player 1 Wins!」を出力する必要があります。およびその逆。2 人のプレイヤーが両方とも表または裏を持っている場合、「引き分け」を出力する必要があります。最後に、各プレイヤーの勝利数を追跡し、すべてのコイントスが行われた後に勝率を出力する必要があります。コイン投げの部分は機能しているように感じますが、各プレーヤーの最終スコアを表示すると、スコアは決して正しくありません。誰でも何か間違ったことを見つけることができますか?
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;
}
}