0

我正在为学校的班级创建一个石头剪刀布游戏。我得到了一切工作,除了设置一些东西以在回答无效选择时重述问题。我认为 do...while 语句在这里最好,但我意识到我在循环的“do”部分调用了一个变量。所以,因为它从另一个循环调用某些东西,所以它找不到那个变量。另外,在我的 while 语句中,我是否正确列出了可接受的变量?我很确定我只是编造了那部分。

非常感谢你们的帮助!

import java.util.Scanner;

public class RockPaperScissorsTest {

    public static void main(String[] args) throws Exception {

        Scanner input = new Scanner(System. in );
        do {
            System.out.println("Player 1, choose 1 for rock, 2 for paper, or 3 for scissors.");
            int P1 = input.nextInt();
        } while (P != 1; P1 != 2; P1 != 3);
        System.out.println("");
        System.out.println("");
        System.out.println("");
        do {
            System.out.println("Player 2, choose 1 for rock, 2 for paper, or 3 for scissors.");
            int P2 = input.nextInt();
        } while (P2 != 1; P2 != 2; P2 != 3);
        if (P1 == 1 & P2 == 1)
            System.out.println("It's a tie!");
        if (P1 == 1 & P2 == 2)
            System.out.println("Player 2 wins!");
        if (P1 == 1 & P2 == 3)
            System.out.println("Player 1 wins!");
        if (P1 == 2 & P2 == 1)
            System.out.println("Player 1 wins!");
        if (P1 == 2 & P2 == 2)
            System.out.println("It's a tie!");
        if (P1 == 2 & P2 == 3)
            System.out.println("Player 2 wins!");
        if (P1 == 3 & P2 == 1)
            System.out.println("Player 2 wins!");
        if (P1 == 3 & P2 == 2)
            System.out.println("Player 1 wins");
        if (P1 == 3 & P2 == 3)
            System.out.println("It's a tie!");
    }
}
4

3 回答 3

3

有几件事跳出来:

  1. 在 Java(以及从 B 语法派生的大多数其他语言)中,逻辑AND 运算符是&&,而不是&(&是数学运算符,执行按位布尔 OR )。

    所以

    if (P1 == 1 && P2 == 1)
    //          ^^---- &&, not &
    
  2. 在 Java 中,变量具有块作用域。这意味着在块内声明的变量仅在该块内可用(以及它包含的任何块),而不是该块外。所以P2你在这里的循环内定义:

    do {
        System.out.println("Player 2, choose 1 for rock, 2 for paper, or 3 for scissors.");
        int P2 = input.nextInt();
    //  ^----------------------------- here
    } while (/*...*/);
    

    ...将仅循环内可用,而不是在循环之后。您需要在循环外声明该变量。(当然对于 也是类似P1的。)在这种情况下,最好的位置是函数的顶部:

    int P1, P2;
    
  3. 在任何逻辑条件(包括 a 的条件while)中,要组合多个条件,请使用逻辑运算符&&(“and”)和||(“or”),而不是分号 ( ;)。例如:

    do {
        System.out.println("Player 2, choose 1 for rock, 2 for paper, or 3 for scissors.");
        P2 = input.nextInt();
    } while (P2 != 1 && P2 != 2 && P2 != 3);
    //               ^^---------^^---- "If P2 is not 1 AND P2 is not 2 AND P2 is not 3"
    
  4. 您有三个不同的测试来查看它是否是平局,并且通常您正在对相同的条件(很多 、 等)进行大量重新P1 == 1测试P2 == 2。您可以简单地通过检查 if 来测试平局P1 == P2,并且可以使用 显着减少条件检查的次数else,例如:

    if (P1 == P2) {
        System.out.println("It's a tie!");
    }
    else if (P1 == 1) {
        if (P2 == 2) {
            System.out.println("Player 2 wins!");
        }
        else {
            System.out.println("Player 1 wins!");
        }
    }
    else if (P1 == 2) {
        if (P2 == 1) {
            System.out.println("Player 1 wins!");
        }
        else {
            System.out.println("Player 2 wins!");
        }
    }
    else { // P1 == 3
        if (P2 == 1) {
            System.out.println("Player 2 wins!");
        }
        else {
            System.out.println("Player 1 wins");
        }
    }
    
  5. (更高级)查看enums。在我重新编写您的逻辑时,我只是相信您的逻辑是正确的,因为在查看代码时我不知道 , 或 是1什么23(很明显,我可以查看您输出的消息。)使用 anenum会使代码更清晰。( if (P2 == RPS.Paper))

我建议阅读一些指导性的 Java 教程。甲骨文有几个.

于 2013-11-05T11:12:21.503 回答
0

您需要将变量声明为全局变量。在您声明扫描仪的地方。并且只在循环中初始化它。

跳出循环:

int P1;

在循环中只做:

P1 = input.nextInt();
于 2013-11-05T11:16:42.483 回答
0

作为@TJ。克劳德告诉你,需要了解‘AND’(‘&&’)操作和‘OR’(‘||’)

这是解决方案的一种编译方法,但您需要改进代码以使其正常工作。希望您在学习 Java 时玩得愉快。

import java.util.Scanner;

public class RockPaperScissorsTest {

public static void main(String[] args) throws Exception {

    Scanner input = new Scanner(System. in );
    int P1 = 0;
    int P2 = 0;
    do {
        System.out.println("Player 1, choose 1 for rock, 2 for paper, or 3 for scissors.");
        P1 = input.nextInt();
    } while (P1 != 1 && P1 != 2 && P1 != 3);
    System.out.println("");
    System.out.println("");
    System.out.println("");
    do {
        System.out.println("Player 2, choose 1 for rock, 2 for paper, or 3 for scissors.");
        P2 = input.nextInt();
    } while (P2 != 1 && P2 != 2 && P2 != 3);
    if (P1 == 1 && P2 == 1)
        System.out.println("It's a tie!");
    if (P1 == 1 && P2 == 2)
        System.out.println("Player 2 wins!");
    if (P1 == 1 && P2 == 3)
        System.out.println("Player 1 wins!");
    if (P1 == 2 && P2 == 1)
        System.out.println("Player 1 wins!");
    if (P1 == 2 && P2 == 2)
        System.out.println("It's a tie!");
    if (P1 == 2 && P2 == 3)
        System.out.println("Player 2 wins!");
    if (P1 == 3 && P2 == 1)
        System.out.println("Player 2 wins!");
    if (P1 == 3 && P2 == 2)
        System.out.println("Player 1 wins");
    if (P1 == 3 && P2 == 3)
        System.out.println("It's a tie!");
}

}

于 2013-11-05T11:19:22.857 回答