Java 一系列石头剪纸游戏的总冠军
我正在创建一个石头剪纸程序。最后,我希望它能决定所有比赛的胜利者。它总是打印出Player1击败Player2和我,不管谁得分最高。我的错误在哪里?我应该如何纠正Java 一系列石头剪纸游戏的总冠军,java,Java,我正在创建一个石头剪纸程序。最后,我希望它能决定所有比赛的胜利者。它总是打印出Player1击败Player2和我,不管谁得分最高。我的错误在哪里?我应该如何纠正 import java.util.Scanner; import java.util.Random; public class RPS2Player{ public static void main(String[]args){ int onePlay, computerPlay, twoPlay, game =
import java.util.Scanner;
import java.util.Random;
public class RPS2Player{
public static void main(String[]args){
int onePlay, computerPlay, twoPlay, game = 0, win1 = 0, win2 = 0, compWin = 0, lose1 = 0, lose2 = 0, compLose = 0, playChoice;
//instantiate objects Scanner and Random
Scanner UI = new Scanner(System.in);
Random num = new Random();
//Get user input: Rock = 0, Paper = 1, Scissors = 2
System.out.println("Hello! would you like to play Rock, Paper, Scissors? 0=yes, 1=no");
playChoice = UI.nextInt(2);
while (playChoice == 0){
game++;
System.out.println("Round " + game);
System.out.println("Player1, choose 0=Rock, 1=Paper, 2=Scissors");
onePlay = UI.nextInt(3);
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("Player2, choose =Rock, 1=Paper, 2=Scissors");
twoPlay = UI.nextInt(3);
//get computer generated input: 0, 1, 2
computerPlay = num.nextInt(3);//defines a random choice of 0, 1, or 2
switch(onePlay){
case 0: System.out.println("Player1 chose Rock"); break;
case 1: System.out.println("Player1 chose Paper"); break;
case 2: System.out.println("Player1 chose Scissors"); break;
}//end switch statement for onePlay
switch (twoPlay){
case 0: System.out.println("Player2 chose Rock"); break;
case 1: System.out.println("Player2 chose Paper"); break;
case 2: System.out.println("Player2 chose Scissors"); break;
}//end switch statement for twoPlay
switch(computerPlay){
case 0: System.out.println("I chose Rock"); break;
case 1: System.out.println("I chose Paper"); break;
case 2: System.out.println("I chose Scissors"); break;
}//end switch statement for computerPlay
//comparisons Player1 vs computer
if (onePlay == 0){//Rock
if (computerPlay == 0){
System.out.println("Player 1 and I tie!");
//computer chose rock - tie game
}
if (computerPlay == 1){
System.out.println("I beat Player1!");
lose1++;
compWin++;//computer chose paper - computer wins
}
if (computerPlay == 2){
System.out.println("Player1 beat me!");
compLose++;
win1++;//computer chose scissors - player wins
}
}//end if statements for onePlay = 0 (Rock)
if (onePlay == 1){//Paper
if (computerPlay == 0){
System.out.println("Player1 beat me!");
compLose++;
win1++;//computer chose rock - player win1s
}
if (computerPlay == 1){
System.out.println("Player1 and I tie!");
// computer chose paper - tie game
}
if (computerPlay ==2){
System.out.println("I beat Player 1!");
lose1++;
compWin++;//computer chose scissor - computer win1s
}
}//end if statements for onePlay = 1 (Paper)
if (onePlay == 2){//Scissors
if (computerPlay == 0){
System.out.println("I beat Player1!");
lose1++;
compWin++;//computer chose rock - computer wins
}
if (computerPlay == 1){
System.out.println("Player1 beat me!");
compLose++;
win1++;//computer chose paper - play wins
}
if (computerPlay == 2){
System.out.println("Player1 and I tie!");
//computer chose scissors - tie game
}
}//end if statements for onePlay = 2 (Scissors)
//end comparisons Player1 vs computer
//comparisons Player2 vs computer
if (twoPlay == 0){//Rock
if (computerPlay == 0){
System.out.println("Player2 and I tie!");
//computer chose rock - tie game
}
if (computerPlay == 1){
System.out.println("I beat Player2!");
lose2++;
compWin++;//computer chose paper - computer wins
}
if (computerPlay == 2){
System.out.println("Player2 beat me!");
compLose++;
win2++;//computer chose scissors - player2 wins
}
}//end if statements for twoPlay = 0 (Rock)
if (twoPlay == 1){//Paper
if (computerPlay == 0){
System.out.println("Player2 beat me!");
compLose++;
win2++;//computer chose rock - player wins
}
if (computerPlay == 1){
System.out.println("Player2 and I tie!");
// computer chose paper - tie game
}
if (computerPlay ==2){
System.out.println("I beat Player2!");
lose2++;
compWin++;//computer chose scissor - computer wins
}
}//end if statements for twoPlay = 1 (Paper)
if (twoPlay == 2){//Scissors
if (computerPlay == 0){
System.out.println("I beat Player2!");
lose2++;
compWin++;//computer chose rock - computer wins
}
if (computerPlay == 1){
System.out.println("Player2 beat me!");
compLose++;
win2++;//computer chose paper - player2 wins
}
if (computerPlay == 2){
System.out.println("Player2 and I tie!");
//computer chose scissors - tie game
}
}//end if statements for twoPlay = 2 (Scissors)
//end comparisons Player2 vs computer
//comparison Player1 vs Player2
if (onePlay == 0){//Rock
if (twoPlay == 0){
System.out.println("Player1 and Player2 tie!");
//Player2 chose rock - tie game
}
if (twoPlay == 1){
System.out.println("Player2 beat Player1!");
lose1++;
win2++;//Player2 chose paper - Player2 wins
}
if (twoPlay == 2){
System.out.println("Player1 beat Player2!");
lose2++;
win1++;//Player2 chose scissors - player1 wins
}
}//end if statements for personPlay = 0 (Rock)
if (onePlay == 1){//Paper
if (twoPlay == 0){
System.out.println("Player1 beat Player2!");
lose2++;
win1++;//computer chose rock - player wins
}
if (twoPlay == 1){
System.out.println("Player1 and Player2 tie!");
// computer chose paper - tie game
}
if (twoPlay ==2){
System.out.println("Player2 beat Player1!");
lose1++;
win2++;//player2 chose scissor - player2 wins
}
}//end if statements for personPlay = 1 (Paper)
if (onePlay == 2){//Scissors
if (twoPlay == 0){
System.out.println("Player2 beat Player1!");
lose1++;
win2++;//Player2 chose rock - player2 wins
}
if (twoPlay == 1){
System.out.println("Player1 beat Player2!");
lose2++;
win1++;//player2 chose paper - player1 wins
}
if (twoPlay == 2){
System.out.println("Player1 and Player2 tie!");
//player2 chose scissors - tie game
}
}//end if statements for personPlay = 2 (Scissors)
//end //comparisons Player1 vs Player2
System.out.println("Would you like to play again? 0=yes, 1=no");
playChoice = UI.nextInt(2);
}//end while loop for play
//user decides not to play or decides to stop playing - Stats are given
if (playChoice == 1){
System.out.println("Ok let's play (again) sometime.");//game ended
System.out.println();
System.out.println("We played " + game + " games.");//number of games played
System.out.println("Player1 won " + win1 + " games, lost " + compWin + " games.");//Player1 wins and losses
System.out.println("Player2 won " + win2 + " games, lost " + lose2 + " games.");//Player2 wins and losses
System.out.println("I won " + compWin + " games and lost " + compLose + " games.");//computers wins and losses
System.out.print("In terms of wins, ");
//determine best player
System.out.println("Across all games played, ");
if (win1 > (win2 & compWin)){
System.out.println("Player1 beat Player2 and I!");
}
else if (win2 > (win1 & compWin)){
System.out.println("Player2 beat Player1 and I!");
}
else
System.out.println("I beat Player1 and Player2!");
}//end while loop
}//end method
}//end program
这应该是
if (win1 > win2 && win1 > compWin)
if ((win1 > win2) && (win1 > compWin)){
System.out.println("Player1 beat Player2 and I!");
}
else if ((win2 > win1) && (win2 > compWin)){
System.out.println("Player2 beat Player1 and I!");
}
else
System.out.println("I beat Player1 and Player2!");
}
对于else if也是一样的
逻辑AND运算符为&&是一个按位AND,这是一个完全不同的操作。这是一种您目前还不会使用的高级功能
你写的是一个常见的错误,把英语直接翻译成代码是行不通的和| |与英语中的and或do不太一样
顺便说一下,语法上应该是Player1击败Player2和我。你的条件应该是
if (win1 > win2 && win1 > compWin)
if ((win1 > win2) && (win1 > compWin)){
System.out.println("Player1 beat Player2 and I!");
}
else if ((win2 > win1) && (win2 > compWin)){
System.out.println("Player2 beat Player1 and I!");
}
else
System.out.println("I beat Player1 and Player2!");
}
因为java中的AND语句是&&不是&,
此外,您的条件检查错误您在比较中使用了位运算符。我认为这不是你的本意
if (win1 > (win2 & compWin)){
// if win2 = 14 and compWin = 9
// 9 (base 10) = 00000000000000000000000000001001 (base 2)
// 14 (base 10) = 00000000000000000000000000001110 (base 2)
// --------------------------------
//14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
// if win2 = 14 and compWin = 0; 14 & 0 = 0
System.out.println("Player1 beat Player2 and I!");
}
我想您是想使用逻辑&&运算符比较win1、win2和compWin
// Should be:
if(win1 > win2 && win1 > compWin) {
System.out.println("Player1 beat Player2 and I!");
}
else if (win2 > win1 && win2 > compWin)){
System.out.println("Player2 beat Player1 and I!");
}
else
System.out.println("I beat Player1 and Player2!");
}
使用&&或| |的逻辑表达式在一侧求值,然后在另一侧求值。如果左侧为true,&&右侧为true,则返回true;否则返回false。非常感谢。所以如果我要解释的话,这一定是一个双重比较,放在一个条件下,非常感谢。因此,如果我必须向某人解释这一点,那么这一定是一个双重比较。你必须将win1与win2和compWin进行比较,然后比较这两种比较的结果。为什么这一比较会因为过于宽泛或好而搁置?对于这种格式,答案可能太长了。我已经得到了我的答案,因为我编辑的问题说-解决了-