このプロジェクトに問題があります。基本的な前提は、ユーザーがフレーズを入力することであり、重複する単語やその数が見つかるはずです。Java、ArrayListから要素を削除する
私の問題は、ただ一つの単語を入力するときに、このような ハローハローハローハローハロー
...など、複数回、そのための出力は次のようになりますです。
"There are 2 duplicates of the word "hello" in the phrase you entered."
"There are 1 duplicates of the word "hello" in the phrase you entered."
これは、このような状況でのみ発生すると思われます。複数の言葉が入っているランダムなフレーズを入力すると、正しい答えが表示されます。問題は重複した単語を削除することと何回か繰り返されますが、何回も繰り返しますが、私は頭の中で頭を囲むことができません。私はどこにでもプリントラインを追加し、あらゆる種類の方法を繰り返す時代を変えました。私はそれをJavaビジュアライザーで使っていましたが、それでも問題を正確に見つけることはできませんでした。どんな助けでも大歓迎です!
これは私のオンラインJavaコースの課題ですが、それは私の専攻に向かない学習/練習のみです。私は答えを探しているだけではありません。私は私のコードを編集していますが、finalList
にinputList
を追加する前に、私は私が正しい方向に
String previous = "";
for(Iterator<String> i = inputList.iterator(); i.hasNext();) {
String current = i.next();
duplicateCounter = 0;
for(int j = + 1; j < finalList.size(); j++) {
if(current.equalsIgnoreCase(finalList.get(j))
&& !current.equals("!") && !current.equals(".")
&& !current.equals(":") && !current.equals(";")
&& !current.equals(",") && !current.equals("\"")
&& !current.equals("?")) {
duplicateCounter++;
duplicateStr = current.toUpperCase();
}
if(current.equals(previous)) {
i.remove();
}
}
if(duplicateCounter > 0) {
System.out.printf("There are %s duplicates of the word \"%s\" in the phrase you entered.", duplicateCounter, duplicateStr);
System.out.println();
}
}
をそれから項目を除去しながらあなたはArrayListのを反復しています。これにより予期しない動作が発生します。安全な方法は 'Iterator.remove()'です。http://stackoverflow.com/a/223929/4190526 –
アイテムを削除しながら配列を反復したい場合は、配列を作成し、上部に繰り返します。 – annena