我想製作一個可以比較整數的Android應用程序。然而,當我試圖比較整數,並且我需要刪除一些條目,因爲它們是冗餘的或者它們不適合,我不能使用Iterator.remove()而不會遇到NullPointerException。下面是具體的輸出:比較數據編號,Iterator.remove()拋出NullPointerException
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.daita.musicale, PID: 22649
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:638)
at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75)
at com.daita.musicale.MainActivity.checkNotes(MainActivity.java:115)
at com.daita.musicale.MainActivity$3.onClick(MainActivity.java:74)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
這裏是代碼區(在com.daita.musicale.MainActivity.checkNotes(MainActivity.java:115)),它給我的錯誤。
public boolean[] checkNumbers(String code1, String code2) {
if (code != null) {
List<String> c1 = Arrays.asList(code1.replace("-1.0,", "").replace("null", "").split(","));
List<String> c2 = Arrays.asList(code2.replace("-1.0,", "").replace("null", "").split(","));
Iterator<String> c1iterator = c1.iterator();
Iterator<String> c2iterator = c2.iterator();
boolean strike = false;
double prev = 0;
int i = 0;
boolean[] correctness = new boolean[c1.size()];
while (c1iterator.hasNext()) {
double c1hertz = Double.parseDouble(c1iterator.next());
double c2hertz = Double.parseDouble(c2iterator.next());
double difference = c1hertz - c2hertz;
if (difference > -1 && difference < 1) {
correctness[i] = true;
double prevDifference = prev - c1hertz;
if (prevDifference > -1 && prevDifference < 1) {
c1iterator.remove(); //specific issue location! (this is line 115 of MainActivity)
c2iterator.remove();
i = 0;
correctness = new boolean[c1.size()];
} else {
prev = c1hertz;
correctness[i] = true;
}
} else {
if (strike) {
correctness[i] = false;
try {
correctness[i - 1] = false;
} catch (ArrayIndexOutOfBoundsException aioobe) {
aioobe.printStackTrace();
}
} else {
correctness[i] = true;
}
}
i++;
}
return correctness;
} else {
return null;
}
}
我已經看過兩個代碼審查和堆棧溢出的其他問題,例如:
Calling remove in foreach loop in Java Removing object from ArrayList in for each loop 拆卸列表元素,同時通過它迭代 我將不勝感激任何幫助。謝謝!
這同樣是一個很好的答案,@berrytchaks,只是我看到的和首先使用了另一種去除使用ArrayList。 – Vicky
很高興你忘記了,即使它不是因爲我的解決方案;) – berrytchaks
非常感謝:D! – Vicky