我正在创建一个Rock Paper Scissor计划。最后,我想让它确定所有比赛的胜利者。它总是打印出来" Player1击败Player2和我"无论谁得分最高。我的错误在哪里,我该如何纠正?
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
答案 0 :(得分:1)
if (win1 > (win2 & compWin))
这应该是
if (win1 > win2 && win1 > compWin)
同样适用于else if
。
逻辑AND运算符为&&
。 &
是一个按位AND,这是一个完全不同的操作。这是一项有点先进的功能,你还没有使用过。
你所写的是将英语直接翻译成代码并不起作用的常见错误。 &&
和||
与"和#34;的工作方式完全相同和"或"用英语做。
(顺便说一句,语法应该说" Player1击败Player2和我。")
答案 1 :(得分:1)
你的条件应该是
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语句是"&&"不是"&", 你的条件检查也是错误的
答案 2 :(得分:0)
您在比较中使用了按位运算符。我不认为这就是你的意图。
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进行比较,并使用逻辑&&和操作
// 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!");
}
使用&&的逻辑表达式或||在一边评估,然后另一边评估。如果左侧是真的,&&右边是真的,回归真实;否则返回false。