0

さて、私は多くの検証スクリプトを使用して調べましたが、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回入力される前にデータを入力できます(最後の 2 行)。なぜこれを行っているのかはわかりませんが、明らかに私の論理と関係があります。ループの後に if ステートメントを使用して 7 フィートであることを検証することを考えましたが、有効でない場合はどうすればループを再開できますか? そのための私の唯一のアイデアは、「有効」という名前のブール変数を作成し、最初にそれを 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;
}
4

1 に答える 1

0

do while ループを 1 つだけ使用できますか

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);
于 2013-03-07T02:56:10.087 に答える