さて、私は多くの検証スクリプトを使用して調べましたが、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;
}