このコードには2つの問題があります。前の質問でここにいた素敵な人たちのおかげで、私はそれを正しく動作させることができましたが、今は再び無限ループに陥っていて、それがどこから来ているのかわかりません。ここで私がやろうとしているのは、絞首刑執行人のゲームです。EditText(litera)で読み取られた単一の文字を処理し、単語(cuvAles)で検索してから、アンダースコアをそれぞれの文字に置き換えます。
問題のある関数は次のとおりです。
litera.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){
String ghici = litera.getText().toString();
if(!ghici.equals("")){
System.out.println(ghici);
litera.setText("");
if(cuvAles.contains(ghici)){
int poz = 0;
while(cuvAles.indexOf(ghici, poz)!= -1){
poz = cuvAles.indexOf(ghici);
String spatii = cuvant.getText().toString();
String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-2);
cuvant.setText(spatii2);
}
}
else gresite.append(ghici+" ");
}
}
});
ここには2つの問題があります。
1)String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-1);
StringIndexOutOfBounds例外をスローします。spatii.length()の部分だと思いますが、-2で試してみましたが、まだ動作しません。単語が下線と一致しない理由は、明確にするためにそれらの間にスペースがあるためです。
2)他の問題を削除すると(文字列を定数に置き換える)、無限ループが発生します(プログラムが応答を停止し、logcatのGCが必死に動作しているので、無限ループだと思います)。