2017-02-02 2 views
-1

については、私の質問:のStringBuilderとループ

forループ内StringBuilder()を使用することが可能ですか?

私はこのコードを持っている:

text.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        text.setTextColor(Color.WHITE); 
        text.setBackgroundColor(Color.parseColor("#c04485ed")); 

        String a = view.getTag().toString(); 
        String b = text.getText().toString(); 
        String formedWord = ""; 

        StringBuilder word = new StringBuilder(); 

        for(int i = 0; i <= 10; i++){ 
         word.append(b); 

         if (word.length() == wordArray[i].length()){ 
          formedWord = word.toString(); 

          if(formedWord.equals(wordArray[i])){ 
           break; 
          } 
         }     
        } 



       } 
      }); 

コードの上の説明

このコードの機能をクリックtextViews()からストリングを形成することであるとifその単語があるの文字列のインデックスi上の文字列のlength()と同じです。ifがチェックされます。 Wordは同じインデックスの文字列と同じです。

ERROR:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.gabriel.salitaangpinoy10, PID: 8780 java.lang.ArrayIndexOutOfBoundsException: length=5; index=6 at com.example.gabriel.salitaangpinoy10.GameScreen$2.onClick(GameScreen.java:247) at android.view.View.performClick(View.java:5210) at android.view.View$PerformClick.run(View.java:21169) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5451) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

そして、私は

com.example.gabriel.salitaangpinoy10.GameScreen$2.onClick(GameScreen.java:247)

をチェックするときには、この行に私をもたらします:

if (word.length() == wordArray[i].length())

+1

このようにすることができます。問題がどこにあるのか教えてください。 –

+0

@Gboyなぜforループ内で 'i ++; 'をインクリメントしていますか? –

+0

ここで起きていることは、 'word'に' b'を続けて続けているので、最初の繰り返し 'b'は' value 'を保持し、2回目の反復 'b'は' valuevalue」を保持します。これは、あなたの言葉の長さに一致する問題を持っている理由です。私の質問の編集を参照するには@TobiasOt – CraigR8806

答えて

3

あなたから以下の行を確認してくださいコードスニペット。条件i < = 10です。これは、ループが壊れていない場合、ループが10回実行されることを意味します。どのようにループが10までカウントする必要があることを知っていましたか?おそらく、イベントテキストの長さからメソッドに渡されるループカウンタの値を導出するか、例外を回避するために、< = wordArray.lengthとする必要があります。

for(int i = 0; i <= 10; i++){ 
+0

Shrinu Namburuからの答えは正しい手掛かりですが、このfor-loopは11回実行されます。 –

+0

ありがとうございます。しかし、それは問題を解決しません。 – Gboy

+0

@TobiasOtto 'StringBuilder()'が形成された文字列を別の変数に渡したい場合はどうすればよいですか? – Gboy