[英]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 !");
}
}
然后我建议你删除你的positiveguess
并while
你的条件里面做一个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.