1

そこで、ランダムなひらがな名ジェネレーターを作成しています (理由は聞かないでください)。少し問題が発生しました。ランダムな名前ジェネレーターはほとんどの場合問題なく動作しますが、何らかの理由で子音が繰り返される長い文字列を生成することがあります。したがって、通常のプログラマーのように問題に直接対処しようとする代わりに、ArrayList をスキャンして、ランダムな生成後に繰り返される文字を削除することにしました。

ArrayList<String> name = new ArrayList<String>(); 
Iterator <String> it   = name.iterator();  
...      // insert random generation here                   
for (h = 0; h < s; h++) { // s is the length of the ArrayList
  ...    
  String curInd = name.get(h);
  String nextInd = name.get(h+1);
  if (curInd.equals(nextInd)) { // NOT 
    name.remove(h);             // WORKING
    s--;                        // :(
  }
}

String previousName = "";
while (it.hasNext()) {
String currentName = it.next();
if (currentName.equals(previousName)) {
    it.remove();
}
previousName = currentName;
}

これは動作しません。エラーなどは発生しません。繰り返される文字 (または、各文字を文字列にしたため、文字列の繰り返し) が削除されないだけです。何が問題なのですか?

4

5 に答える 5

2

Iterator.removeリストをトラバースしながら要素を削除するには、 を使用する必要があります。

于 2013-11-04T05:36:40.160 に答える
0

Setたとえば、何らかの種類の a を使用して、重複する要素を自動的に削除できます...

ArrayList<String> name = new ArrayList<String>();
name.add("A");
name.add("A");
name.add("B");
name.add("B");
name.add("B");
name.add("C");
name.add("C");
name.add("C");
System.out.println(name);
Set<String> set = new TreeSet<String>();
set.addAll(name);
System.out.println(set);

もちろん、これにより、隣り合って表示されるものだけでなく、すべての重複が削除されます...

例えば...

[A, A, B, B, B, C, C, C]
[A, B, C]

または...

[A, B, C, B, C, B, C, A]
[A, B, C]

そのため、当面のニーズに合わない可能性があります...

于 2013-11-04T05:47:45.250 に答える