2017-02-13 16 views
-2

ユーザーに文字(R、G、B)を尋ねるプログラムを作成しようとしていて、その後5つの結果を出力しました。 2つの文字が連続していることはできません。 3番目の文字を入力するとindexoutofboundsが得られ、2文字チェックが機能しません。スタック。範囲外のインデックス。理由を知ることができません

package absolutejava; 

import java.util.Scanner; 
import java.util.*; 

public class RGB { 

    public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 
     int count = 0; 
     boolean isColor = false; 
     String finalString = ""; 
     int i = 0; 
     int j = 1; 

     String temp = ""; 
     for (count = 0; count < 5;) { 
      System.out.println("Enter a color. Use R for red, G for green, and B for blue."); 
      temp = kb.nextLine(); 

      if ((temp.equals("R") || temp.equals("G") || temp.equals("B"))) { 
       isColor = true; 
       temp += temp; 

      } else { 
       isColor = false; 
       System.out.println("Invald Color, please choose again"); 
      } 

      if (isColor == true && j < 6 && i < 5) { 
       count++; 
       if (temp.length() > 2 && temp.length() <= 5 && finalString.substring(i, j).equals(temp.substring(i - 1, j - 1))) { 
        System.out.println("Two colors cannot be next to each other "); 
        isColor = false; 
        count--; 

       } else if (temp.length() == 5) { 
        finalString = finalString + temp.substring(i); 
        //debugging line 
        System.out.println("i " + i + "j " + j + "count " + count + " " + finalString + " length " + temp.length()); 
        i++; 
        j++; 
       } else { 
        finalString = finalString + temp.substring(i, j); 
        //debugging line 
        System.out.println("i " + i + "j " + j + "count " + count + " " + finalString + " length " + temp.length()); 
        i++; 
        j++; 
       } 
      } 
     } 

     System.out.println(finalString); 
    } 
} 
+0

なぜ前の色を追跡するために変数を使用しないのですか?入力された現在の色が前の色と等しい場合は、再度色を入力するようユーザーに依頼します。そうでなければ、さらに進んでください。 –

答えて

0

次の行は間違いなく間違っている:

temp += temp; 

あなたが現在入力してすべての反復をtempを交換しているので、これは効果がありません。たとえそのではない場合でも、同じ文字列を追加するだけです。 「A」は「AA」になります。

私はあなたがその旨を

finalString += temp; 

か何かを意味想定しています。

一般的には、tempfinalをいくつか混在させているようです。

もう1つ:truefalseと明示的に比較しないでください。これは不要で、一般的に不適切なスタイルとみなされます。

関連する問題