硬币翻转代码

时间:2015-09-30 15:02:01

标签: java

我是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!");
                    }
                }
            }

2 个答案:

答案 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块。

请看一下这篇文章:The if-then and if-then-else Statements

答案 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"),因为大小写不会影响输出。