約20,000の値からなるファイルから作成されたArrayList内の重複する整数の数を数えようとしていますキャラクター。私の現在のコードは、私が簡単に変更することができない、特定のリストを除いて、すべてのリストに対して機能します。私のプログラムは特定のリスト内のすべての重複数をカウントしませんが、他のすべてに対して有効です
//Arrays Class, use numerical sorting method
//Read in each number and look for duplicates, return the number of duplicates.
System.out.println("Creating List.....");
File numbers = new File("src/testlist");
List<Integer> numberlist = new ArrayList<Integer>();
try {
Scanner input = new Scanner(numbers);
while(input.hasNextInt()){
//int number = input.nextInt();
numberlist.add(input.nextInt());
//System.out.println(number);
}
System.out.println("List Created");
input.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(NoSuchElementException r){
r.printStackTrace();
System.out.println("oops");
}
System.out.println("Sorting Numerically.....");
Collections.sort(numberlist);
System.out.println(numberlist);
System.out.println("Counting Duplicate Numbers.....");
int duplicates = 0;
for(int i = 0; i < numberlist.size()-1; i++){
if(numberlist.get(i) == numberlist.get(i+1)){
duplicates++;
numberlist.remove(i);
}
}
System.out.println("Duplicates: " + duplicates);
ファイルimはhereです。 私はこのプログラムが意図したとおりに動作することを証明するために他の手作りのテストデータを試しましたが、この特定のリストは私に問題をもたらしています。
あなたが立ち往生している現在のリストの出力は何ですか? –
なぜこのステップを実行しているのですか? '' numberlist.remove(i); '' – osanger
現在の要素( 'remove(i)')を削除すると、次の要素はその位置になりますが、ループ 'i'がインクリメントされ、位置にシフトされた要素は評価されませんでした。 'remove()'を実行するときに 'i'を減らす必要があるので、ループの' i ++ 'は' i'を変更しません。 – Andreas