2

ユーザーに double 型の数値を入力するように求める単純な UI を作成しようとしています。入力が double 型でない場合、ユーザーが有効な double 型を入力するまで、プログラムはプロンプトを表示し続ける必要があります。ユーザーが有効な double 型を入力すると、ユーザーが別の double 型の数値を入力しない限り、プログラムは何も実行しないため、以下のコードはまだ完全には機能していません。while ループの条件 (sc.hasNextDouble()) が最初の有効な入力を消費していると思います。これを修正する方法は?どうもありがとう

Scanner sc = new Scanner(System.in);

System.out.println("Type a double-type number:");
while (!sc.hasNextDouble())
{
    System.out.println("Invalid input\n Type the double-type number:");
    sc.next();
}
userInput = sc.nextDouble();    // need to check the data type?
4

5 に答える 5

4

double が入力されない可能性があるため、String を読み取ってから double に変換することをお勧めします。標準的なパターンは次のとおりです。

Scanner sc = new Scanner(System.in);
double userInput = 0;
while (true) {
    System.out.println("Type a double-type number:");
    try {
        userInput = Double.parseDouble(sc.next());
        break; // will only get to here if input was a double
    } catch (NumberFormatException ignore) {
        System.out.println("Invalid input");
    }
}

ループは、double が入力されるまで終了できません。その後、userInputその値が保持されます。

また、プロンプトをループ内に配置することで、無効な入力でのコードの重複を回避できることにも注意してください。

于 2013-09-15T23:48:20.667 に答える
1

int と double の場合、私が行う方法は、丸めて同じかどうかを確認することです..

double input = sc.nextdouble();
if(input == Math.floor(input) {
    //Double
} else {
    //Int
}

入力が Int、Double、String、または Character であるかどうかを確認する方法を次に示します。

import java.util.Scanner;


public class Variables {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = scan.next();
        try{
            double isNum = Double.parseDouble(input);
            if(isNum == Math.floor(isNum)) {
                System.out.println("Input is Integer");
            }else {
                System.out.println("Input is Double");
            }
        } catch(Exception e) {
            if(input.toCharArray().length == 1) {
                System.out.println("Input is Character");
            }else {
                System.out.println("Input is String");
            }
        }

    }

}
于 2013-09-15T21:53:36.297 に答える
0

Double.parseDouble(stringInput);入力を文字列としてスキャンすると、それを解析して double かどうかを確認できます。 ただし、この静的メソッド呼び出しを try-catch ステートメントでラップすると、double 値が解析されない状況を処理できます。

于 2013-09-15T21:54:42.570 に答える