2016-11-26 2 views
0

2文字を比較しようとしていますが、char E = guesstwo.charAt(C)という行にStringOutOfBoundExceptionを受け取りました。どうすれば解決できますか?stringbuilderを文字に変換するとき

関連するコードは、以下である:

class Hangman{ 
    public static void main(String args[]) { 
     String guessedwords = ""; 
     Scanner keys = new Scanner(System.in); 
     String phrase = keys.nextLine(); 
     int guesslim = keys.nextInt(); 
     String guess = keys.next(); 

     //phrase length for guessing & StringBuilder to allow modifications 
     StringBuilder phrasetwo = new StringBuilder(phrase); 
     StringBuilder guesstwo = new StringBuilder(guess); 

     for (int i = 0; i < phrasetwo.length(); i++) { 
      guessedwords += " _"; 
     } 
     //loop runs through all characters 
     for (int i = 0; i < phrasetwo.length(); i++) {  
      char d = phrasetwo.charAt(i); 
      char e = guesstwo.charAt(i); 
      ... 
     } 
    } 
} 
+0

'phrasetwo.length()'の範囲内に 'guesstwo.length()'があります。 –

答えて

0

String配列が0基づいています。長さ()は配列のサイズを返しますが、配列の最後の位置は長さよりも短い配列です。 forの条件部分に "< ="を使用する必要があります。

"< ="ここに。次のコードで

for(int C = 0; C <= phrasetwo.length(); C++){ 

    char D = phrasetwo.charAt(C); 
    char E = guesstwo.charAt(C); 

    //if statement compares two characters 
    if(E == D){ 
     System.out.println("That is a correct. Please guess again"); 
     guesstwo = keys.next(); 
     goodcount++; 
    } 
+0

ありがとう、私はこれを試みましたが、この行でも同じエラーが表示されます:char E = guesstwo.charAt(C); – jeblacker

+0

しかし、2番目の推測でのみ。 – jeblacker

+0

@jeblackerあなたは2人でそれを使用していますか? – Elvermg

0

//loop runs through all characters 
for (int i = 0; i < phrasetwo.length(); i++) {  
    char d = phrasetwo.charAt(i); 
    char e = guesstwo.charAt(i); 
    ... 
} 

i0からphrasetwo.length - 1に値をとります。次に、位置iの文字をphrasetwoguesstwoの両方で参照します。 phrasetwoguesstwoより大きい場合、エラーが発生したステートメントは、文字列の末尾を超える文字を参照しようとします。したがって、エラー。

関連する問題