-3
я делал в прошлом CCC (канадский Computing конкурс) вопрос, и я получил странные ошибки, которые, когда я использую IndexOf() до целого числа в ArrayList она возвращает 0.Java IndexOf (целое) возвращает 0
Здесь это код:
package problem4;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.CopyOnWriteArrayList;
public class Problem4 {
static List<Integer> totalnum = new CopyOnWriteArrayList<>();
static ArrayList<Integer> div = new ArrayList<>();
static String output = "";
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
try {
int total = in.nextInt();
for (int i = 0; i < total; i++) {
totalnum.add(i + 1);
}
int roundnum = in.nextInt();
for (int i = 0; i < roundnum; i++) {
int tempnum = in.nextInt();
div.add(tempnum);
}
print("cache org: " + totalnum.toString());
for (int divnum : div) {
for (int check : totalnum) {
print(check + " index: " + totalnum.indexOf(check));
if (totalnum.indexOf(check) % divnum == 0) {
totalnum.remove(totalnum.indexOf(check));
}
}
print("cache " + divnum + ": " + totalnum.toString());
}
String output = totalnum.toString().replace("[", "")
.replace("]", "").replace(",", "");
for (int i = 0; i < output.length(); i++) {
System.out.println(output.charAt(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void print(String input) {
System.out.println(input);
}
}
А вот вход/выход:
10
2
2
3
cache org: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1 index: 0
2 index: 0
3 index: 0
4 index: 0
5 index: 0
6 index: 0
7 index: 0
8 index: 0
9 index: 0
10 index: 0
cache 2: []
cache 3: []
Кто-нибудь знает, что это не так?
Ну, так как вы удаляете элементы на каждой итерации, индекс всегда будет равен нулю. –
Единственным сюрпризом здесь является отсутствие исключения ConcurrentModificationException. Фактически, я утверждаю, что это на самом деле объясняет немотивированное использование «CopyOnWriteArrayList»: OP используется для получения этого исключения, но вместо его исправления он изменил реализацию. –
@MarkoTopolnik Это потому, что это 'CopyOnWriteArrayList'. –