在java中使用Scanner验证double

时间:2013-03-07 02:51:24

标签: java validation double do-while

好的,所以我使用java.util.Scanner浏览了许多验证脚本,但找不到任何可以帮助我的东西。我已经很好地了解了如何设置我的程序,但是我仍然需要一些帮助才能让它以我想要的方式工作。基本上,我的目标是要求用户输入一个高度,我想确保它不超过84英寸,数字和正面。

到目前为止,这是我的代码:

// the part inside main() that is relevant
double height = 0;
Scanner input = new Scanner(System.in);

height = get_height(height, input);

private static double get_height(double height, Scanner input) {
        do {
            System.out.print("Please enter your height (in inches): ");
            while (!input.hasNextDouble() || input.nextDouble() > 84) {
                if (!input.hasNextDouble()) {
                    System.out.print("You must enter a valid number: ");
                    input.next();
                }
                else if (input.nextDouble() > 84) {
                    System.out.print("Are you really taller than 7 feet? Try again: ");
                    input.next();
                }
            }
            height = input.nextDouble();
        } while (height <= 0);

        return height;
    }

这些是我得到的结果:

Please enter your height (in inches): hey
You must enter a valid number: 100
100
Are you really taller than 7 feet? Try again: 64
(blank space)
64
64

正如你所看到的,或者你可能无法分辨,它没有完全按照它应该发出的正确信息,然后只留下空行,你可以在它需要之前输入数据两次(你可以见最后2行)。我不知道为什么会这样做,但显然它与我的逻辑有关。我想在循环之后使用if语句来验证它是7英尺,但如果它无效那么我该如何重新启动循环呢?我唯一的想法是创建一个名为“valid”的布尔变量,并最初将其设置为false,当它为true时退出循环并返回。我可以使用一些建议!!

哦,这是那些想知道的人的作业。我不希望我的程序是为我写的,但建议很可爱。

编辑:好的,我自己拿到了。感谢我收到的大量帮助..

    private static double get_height(double height, Scanner input) {
    boolean valid = false;
    while (!valid) {
        do {
            System.out.print("Please enter your height (in inches): ");
            while (!input.hasNextDouble()) {
                System.out.print("You must enter a valid number! Try again: ");
                input.next();
            }
            height = input.nextDouble();
            if (height > 84) {
                System.out.println("Are you really over 7 feet? I don't think so..");
                valid = false;
            }
             else {
                valid = true;
            }
        } while (height <= 0);
    }

    return height;
}

1 个答案:

答案 0 :(得分:0)

你只能使用1 do while循环

do {
    //print messages
    height = input.nextDouble();
} while (!"validation conditions");

或者如果您想要不同的消息

boolean valid = false;
do {
    //edit
    System.out.print("Please enter your height (in inches): ");
    while (!input.hasNextDouble()) {
        System.out.print("You must enter a valid number! Try again: ");
        input.next();
    }// end edit

    height = input.nextDouble();
    if(height > 84) {
        valid = false;
        System.out.println("too tall");
    } //add more else if conditions
    else {
        valid = true;
    }
} while (!valid);