7

タイトルが意味不明で申し訳ありませんが、私はそれをどのように表現すればよいかわかりませんでした。

問題:

ユーザーからa、b、c、またはdのいずれかを取得する多肢選択式クイズゲームを作成しています。言われたとおりにすれば問題ありませんが、何も入力せずにEnterキーを押すと、StringIndexOutOfBoundsExceptionが発生します。なぜこれが起こっているのか理解していますが、私は Java が初めてで、修正する方法が思いつきません。

私がこれまでに持っているもの:

    System.out.println("Enter the Answer.");

    response = input.nextLine().charAt(0);

    if(response == 'a')
    {
            System.out.println("Correct");
    }

    else if(response == 'b' || response == 'c' || response == 'd')
    {
        System.out.println("Wrong");
    }
    else
    {
        System.out.println("Invalid");
    }

もちろん、空の文字列の charAt(0) 値を取得できないため、ユーザーが何も入力しない場合、プログラムはコードの 2 行目を超えることはありません。私が探しているのは、応答が null かどうかを確認するものです。そうであれば、戻ってユーザーにもう一度質問してください。

ご回答ありがとうございます。

4

5 に答える 5

6

do-while ループを使用できます。交換するだけ

response = input.nextLine().charAt(0);

String line;

do {
  line = input.nextLine();
} while (line.length() < 1);

response = line.charAt(0);

これは、ユーザーが空白行を入力するたびに呼び出しを続けますinput.nextLine()が、空白以外の行を入力するとすぐに続行さresponseれ、その空白以外の行の最初の文字に等しく設定されます。ユーザーに再度回答を求める場合は、ループの内側にプロンプ​​トを追加できます。ユーザーが文字 a ~ d を入力したことを確認する場合は、そのロジックをループ条件に追加することもできます。

于 2012-10-22T03:31:31.173 に答える
3

exception( StringIndexOutOfBoundsException) を処理するか、このステートメントを中断してください

    response = input.nextLine().charAt(0);

なので

    String line = input.nextLine();
    if(line.length()>0){
        response = line.charAt(0);
    }

例外処理:

    try{
        response = input.nextLine().charAt(0);
    }catch(StringIndexOutOfBoundsException siobe){
        System.out.println("invalid input");
    }
于 2012-10-22T03:30:15.463 に答える
2

さらに、@ HovercraftFullOfEels '(完全に有効) の回答に加えて、これらの例外を「キャッチ」できることを指摘したいと思います。例えば:

try {
    response = input.nextLine().charAt(0);
} catch (StringIndexOutOfBoundsException e) {
    System.out.println("You didn't enter a valid input!");
    // or do anything else to hander invalid input
}

つまり、-block のStringIndexOutOfBoundsException実行時に a が検出された場合、try-block 内のコードcatchが実行されます。例外のキャッチと処理について詳しくは、こちらをご覧ください。

于 2012-10-22T03:31:34.587 に答える
2

単純:

  • 最初に入力を文字列として取得し、それを一時的な文字列変数に入れます。
  • 次に、文字列の長さを確認します。
  • > 0 の場合、最初の文字を抽出して使用します。
于 2012-10-22T03:29:24.387 に答える
0

また、以下の場合も StringIndexOutofBoundException が発生します。

  1. 利用できない文字列を検索する
  2. 利用できない文字列と一致

    例:

    リスト ans=new ArrayList();
    temp="および";
    String arr[]={"android","jellybean","kitkat","ax"};
    for(int index=0;index < arr.length;index++ )
    if(temp.length()<=arr[index].length())
    if(temp.equlsIgnoreCase((String)arr[``index].subSequence (0,temp.length())));
    ans.add(arr[index]);

indexoutofboundexception を回避するには、次のコードが必要です

if(temp.length()<=arr[index].length())

ここでは、 src 文字列の長さが temp と等しいかそれ以上であることを確認しているためです。src 文字列の長さが「arrayindexoutof boundexception」を介してそれよりも短い場合

于 2013-11-16T09:17:03.040 に答える