繁体   English   中英

这个非常简单的猜谜游戏不起作用

[英]This very simple guess game does not work

我尝试制作一个非常简单的猜谜游戏,我想通过使用 switch 功能对用户的猜测进行分析来添加一个令人兴奋的补充,但我很惊讶它没有运行该分析

public static void main (String args[]){

Scanner reader = new Scanner(System.in).useLocale(Locale.ROOT);

int num = 8 , guess;
boolean positiveguess = true;
while (positiveguess) {
System.out.println("Enter your guess = ");
guess = reader.nextInt();
if (guess != num)
    switch(guess)
    {
        case '1':
            if (num-5 < guess && num + 5 >guess)
                System.out.println("Your guess is almost close! \nTry again ");
       break;
        case '2':
            if (num-10 < guess && num + 10 >guess)
                System.out.println("You need to guess again ");
        break;    
    }              
else
    positiveguess = false;
    
}
System.out.println("Great !");

您的开关基于用户输入,而不是给定值和预期值之间的差异。 首先,我建议您使用if/else结构保持简单,例如

public class Main {

    public static void main (String args[]) {

        Scanner reader = new Scanner(System.in).useLocale(Locale.ROOT);

        int num = 8, guess;
        boolean positiveguess = true;
        while (positiveguess) {
            System.out.println("Enter your guess = ");
            guess = reader.nextInt();
            if (guess != num) {
                if (num - 5 < guess && num + 5 > guess) {
                    System.out.println("Your guess is almost close! \nTry again ");
                } else if (num - 10 < guess && num + 10 > guess) {
                    System.out.println("You need to guess again ");
                }
            } else {
                positiveguess = false;
            }
        }
        System.out.println("Great !");
    }
}

然后我建议你删除你的positiveguesswhile你的条件里面做一个while循环。 并使用Math.abs()来获取猜测值和期望值之间的差异。

public class Main {

    public static void main (String args[]) {

        Scanner reader = new Scanner(System.in).useLocale(Locale.ROOT);

        int num = 8;
        int guess = Integer.MIN_VALUE;

        while (guess != num) {
            System.out.println("Enter your guess = ");
            guess = reader.nextInt();

            int diff = Math.abs(num - guess);
            if (diff != 0) {
                if (diff < 5) {
                    System.out.println("Your guess is almost close! \nTry again ");
                } else if (diff < 10) {
                    System.out.println("You need to guess again ");
                } else {
                    System.out.println("You're way too far bro");
                }
            }
        }
        System.out.println("Great !");
    }
}

您在这里错误地使用了switch 看来你正在寻找这样的东西:

switch (guess) {
    // first case
    case (num-5 < guess && num + 5 >guess):
        System.out.println("Your guess is almost close! \nTry again ");
    // second case
    case (num-10 < guess && num + 10 >guess):
        System.out.println("You need to guess again ");
}

但这不是有效的语法 在 Java 中, switch/case只能将元素与相同类型的其他元素(或者,在较新版本中,多个元素或一个类)进行比较,而不能像if can 那样执行复杂的条件检查。 可能你然后试图通过组合case '1'if语句来“修复”它,但是虽然合法,但case '1'只有在guess'1' (即 49)时才会出现这种情况,只有这样才会继续检查if条件。

相反,只需删除switch/case并直接使用if语句(不要忘记else ):

if (num-5 < guess && num+5 > guess) {
    System.out.println("Your guess is almost close! \nTry again ");
} else if (num-10 < guess && num+10 > guess) {
    System.out.println("You need to guess again ");
}

此外,您可以通过将顺序更改为(num-5 < guess && guess < num+5)或使用Math.abs来查找绝对差异并在条件中使用它,从而使这些检查更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM