0

Javaを始めたばかりなので、おそらく簡単な質問ですが、私のような質問が見つからなかったので、投稿することにしました。

オプション1〜8の「メインメニュー」を書いています。誰かが 8 より大きく 1 より小さい数字を入力したときにエラーを処理する方法はわかりましたが、文字または文字を入力した場合にエラー メッセージを表示する方法がわかりません...

    while(menuChoice != 8)
        {
        //main menu that loops

        switch(menuChoice)
        {
        case 1: 
            //code
            break;

        case 2:
            //code
            break;

        case 3:
            //code
            break;

        case 4:
                            //code
            break;

        case 5:
            //code
            break;

        case 6:
                            //code
            break;

        case 7:
                            //code
            break;

        case 8:
                            //code
            break; 

        default: 
            System.out.println("Error: Invalid Menu Selection."); 
            }
        }
4

5 に答える 5

0

while ループに入る前にこの関数を使用し、エラー メッセージを表示します。

    public static boolean isNumeric(String str)
{
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}
于 2013-09-30T18:28:24.620 に答える
0

これがコンパイルされると仮定すると、あなたが求めていることは不可能です。数字をオンにしているため、数字が文字かどうかを確認できません。可能であれば、コードはコンパイルされません。

ユーザー入力を として取得しString、文字列を検証する必要があります。文字列に数値以外の値が含まれている場合は、エラーがスローされます。そうでない場合は、数値に変換してから、スイッチを実行します。

より良い設計は、検証レイヤーを持つことです。入力が検証されたら、それ以降は有効であると想定してください。

擬似コード:

String input = //
if (containsNonNumerics(input))
    throw error
inputAsInt = castToInt(input)
if (outOfRange(inputAsInt)
    throw error
switch //your current code goes here
于 2013-09-30T18:12:36.907 に答える
0

まず、while ループを使用しても、必要な機能が得られません。キーボードから入力イベントを受信できるようにするためにKeyAdapterを使用する方法を検討する必要があります。たとえば、数字が押されている場合は、それが実際に数字であることを検証できます。数字である場合は、switch ステートメントを使用できます。実行する適切なコードを決定します。

于 2013-09-30T18:15:24.130 に答える
0

menuChoice はキャラクターだと思います。その場合、次のいずれかの手動チェックを行うことができます

if('0' <= mc && mc <= '9') {
  // do your regular checks
}

文字列の場合は、

try {
  Integer.parseInt(mc)
} catch (NumberFormatException e) { // Not a number. Do your error reporting stuff }

HTH。

于 2013-09-30T18:15:24.433 に答える
0

switch ステートメントは、数値型 (int、byte、char、short) でのみ機能します。スイッチに何か他のものを追加しようとすると、コンパイラは一般的に許可します。しかし、どういうわけか (ケートまたはその他の方法で) switch ステートメント変数を追加したい場合は、変数が必要なタイプであるかどうかを if ステートメントで確認する必要があります。例:

if(var instanceof String){
    System.out.println("Error we don't acceped type string");
}
else{
    switch(var){
        ....
    }
}
于 2013-09-30T18:17:48.780 に答える