2012-10-22 16 views
7

申し訳ありませんが、タイトルが意味をなさないが、私はそれを言葉にする方法を知らなかった。charに値がない場合、StringIndexOutOfBoundsExceptionを回避するにはどうすればよいですか?

問題:

私は、ユーザから、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行目を過ぎてそれを作ることはありませんもちろん、空のString私が探しているのは、レスポンスがヌルであるかどうかをチェックするもので、そうであれば、再度質問してユーザーに質問してください。

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

+1

'input'は' java.util.Scanner'型であると仮定します。その場合、 'null'ではなく空のstring_を実際に返します。 – DaoWen

+0

はい、空のStringになります。そのため、 'input.nextLine()。charAt(0);'はStringIndexOutOBoundsExceptionを生成します。 – jlordo

答えて

6

。ただ、

String line; 

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

response = line.charAt(0); 

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

を置き換えるこれは、ユーザーが空白行を入力し、しかし、すぐに彼らは非空白行を入力すると、それが継続して設定されますようinput.nextLine()何度でも呼び出すしていきますresponseは、その空白以外の行の最初の文字に等しい。ユーザーが答えを返すようにするには、プロンプトをループの内側に追加します。ユーザーが文字a-dを入力したことを確認したい場合は、そのロジックをループ条件に追加することもできます。

2

シンプル:

  • Stringとして最初に入力を取得し、一時的な文字列変数にそれを置きます。
  • 次に、文字列の長さを確認します。
  • then> 0の場合、最初のcharを抽出して使用します。
3

例外を処理(StringIndexOutOfBoundsException)または

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

例外処理

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

としてこの文を破るどちらか:あなたは、whileループを使用することができます

try{ 
     response = input.nextLine().charAt(0); 
    }catch(StringIndexOutOfBoundsException siobe){ 
     System.out.println("invalid input"); 
    } 
+0

'input.nextLine()'が 'null'になることはありますか? – arshajii

+0

@ A.R.S .:長さチェックの前にヌルチェックを入れるのが習慣になっています。削除されました。 –

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 
} 

即ちStringIndexOutOfBoundsExceptiontry - ブロックを実行するとき、catch - ブロック内のコードが実行される発生した場合。例外のキャッチと処理の詳細については、hereを参照してください。

0

StringIndexOutofBoundExceptionは、以下の状況でも発生します。 EX用

利用できない文字列では使用できない文字列

  • マッチの検索

    1. 一覧ANS =新しいArrayListのを();
      temp = "and";
      文字列arr [] = {"android"、 "jellybean"、 "kitkat"、 "ax"}; (;指数< arr.length; int型のインデックス= 0、インデックス++)用

      IF(temp.length()< = ARR [インデックス] .LENGTH())
      (temp.equlsIgnoreCase((文字列)ARR場合[ `` index '.SubSequence(0、temp.length())));
      ans.add(arr [index]);

    ここでは、SRCの長さをchekingているので、次のコードは、(temp.length()< = ARR [インデックス] .LENGTH())

    場合indexoutofboundexception

    を回避するために必要とされます文字列がtempより大きいか等しい。 src文字列の長さが "arrayindexoutof boundexception"よりも小さい場合

  • 関連する問題