我是Java新手。我得到了一个编写一个生成随机数的程序的任务。然后程序必须分配" head"或者"尾巴"数字,并要求用户猜测它是头还是尾。如果用户输入正确的答案,程序应该回答“好猜!”#34;。如果用户输入了错误的答案,程序应该响应" oops!"。
我的程序无法正常运行。无论用户猜测什么,它总是输出"好猜测!"。当它选择" tails"并且用户猜错了,另外输出" oops!"。当用户猜到" head"程序永远不会输出" oops!"一点反应。
这就是我写的:
import java.util.Scanner;
public class HeadsOrTails {
public static void main(String[] args) {
int num1 = (int)(Math.random() * 2);
System.out.println ("Enter heads or tails");
Scanner user_input = new Scanner (System.in);
String flip = user_input.next();
if (flip.equals ("heads") && (num1 == 1)) {
}
System.out.println ("good guess!");
{
if (flip.equals ("tails") && (num1 == 1)) {
System.out.println ("Oops!");
if (flip.equals ("heads") && (num1 == 0)) {
System.out.println ("oops!");
if (flip.equals ("heads") && (num1 == 0)) {
System.out.println ("good guess!");
}
}
}
答案 0 :(得分:2)
正确缩进后,您发布的代码如下所示:
import java.util.Scanner;
public class HeadsOrTails {
public static void main(String[] args) {
int num1 = (int)(Math.random() * 2);
System.out.println ("Enter heads or tails");
Scanner user_input = new Scanner (System.in);
String flip = user_input.next();
if (flip.equals ("heads") && (num1 == 1)) {
}
System.out.println ("good guess!"); {
if (flip.equals ("tails") && (num1 == 1)) {
System.out.println ("Oops!");
if (flip.equals ("heads") && (num1 == 0)) {
System.out.println ("oops!");
if (flip.equals ("heads") && (num1 == 0)) {
System.out.println ("good guess!");
}
}
}
}
}
现在很清楚,您的代码并没有完全符合您的要求。
正如@Erwin Bolwidt正确指出的那样,第一个"好猜测"输出错误地放在if块之外。
其余的if块在它们不应该嵌套时全部嵌套 - 它们也应该是if-then-else块。
答案 1 :(得分:1)
这个问题的一个更简单的解决方案是为头部和尾部分配数值,并检查数值是否等于1或0 ..它需要更少的if语句。
import java.util.Scanner;
public class HeadsOrTails {
public static void main(String[] args) {
int num1 = (int)(Math.random() * 2);
int guess = 0;
System.out.println ("Enter heads or tails");
Scanner user_input = new Scanner (System.in);
if(user_input.next().equalsIgnoreCase("heads")) guess = 1;
if(guess==num1){
System.out.println("Good guess!");
} else {
System.out.println("Oops!");
}
}
}
此解决方案不考虑用户可以输入除头部或尾部之外的其他内容,但对于这个简单的程序,似乎没有必要。此外,如果用户正在使用CAPS编写,请务必使用.equalsIgnoreCase("heads")
而不是.equals("heads")
,因为大小写不会影响输出。