2016-12-30 1 views
0

私はユーザーがゲームで隠し文字を見つけることができるAndroidアプリケーションで作業しています。これらの文字はArrayListに追加されます。文字が表示され、利用可能な文字を使用して5文字の単語を入力できます。私の問題は、手紙が使用されるときです。私はそれをarraylistから削除して、ユーザーがそれを再び使用できないようにしたいと考えています。例えば。ユーザーはこれらの文字を収集しました。 彼は単語minisを入力します。これは 'i'を2回使用し、ユーザーは 'i'を1つだけ使用できるので、これは受け入れられません。私は使用された各文字を取り除くために各反復で例を挙げたいと思います。その部分の私のコードは以下の通りです。カウンターは、単語が有効かどうかを調べるために使用されます。ユーザーの入力で見つかるたびに、文字のArrayListから文字を削除

public void checkValidWord(){ 

     for(int i = 0; i < answerWord.length(); i++){ 
      for(Character letter: LettersCollected){ 
       if(answerWord.charAt(i) == letter){ 
        LettersCollected.remove(answerWord.charAt(i)); 
        counter ++; 
       } 
      } 
     } 
     if(counter == 5){ 
//   for(int i = 0; i<answerWord.length(); i++){ 
//    LettersCollected.remove(answerWord.charAt(i)); 
//   } 
      calculateScore(); 
     }else{ 
      //Display error message that user does not have letter used available 
     } 
+2

より良い命名標準のために「lettersCollected」あなたは正確に何を求めている「LettersCollected」? –

+0

私の問題は、使用可能な単語のarraylistからユーザーの入力に使用された各文字を削除して、2度使用できないようにする方法です。私のコードは現在クラッシュしています。したがって、入力の文字が利用可能な文字と照合される各反復で、使用可能な文字のarraylistから削除された文字を使用したい – Nicholas

+0

利用可能な文字のarraylistに2回表示される場合、ユーザーは2回だけ文字を使用することができます。 – Nicholas

答えて

1

でこれを使用してください、あなたはConcurrentModificationExceptionが例外を取得していますか? LettersCollectedは、あなたが内部で使用しているため、各ループは、リストの上に行くためにイテレータを使用して、リスト上のremoveメソッドを使用して一致文字を削除する

List<Character> or ArrayList<Character> 

であると仮定すると

ArrayListのJavaDocから、要素の反復処理中にリストを同時に変更すると、ConcurrentModificationExceptionが発生します。 これを修正するには、Iteratorを使用できます。

Iterator<Character> itr=LettersCollected.iterator() 
while(itr.hasNext()){ 
    Character letter=itr.next() 
    if(answerWord.charAt(i) == letter){ 
     itr.remove(); 
    } 
} 

また、変数名を変更してみてください

0

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(5)}); 
editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (LettersCollected.contains(s.charAt(s.lenght()-1))) 
        LettersCollected.remove(s.charAt(s.lenght()-1)) 
       else { 
        // Display error message 
        } 
       if (s.lenght() == 5) 
       showResult(); 
      } 
     }); 
関連する問題