我不知道这是怎么回事,也许我错过了一些简单的事情。
我试图删除第一个索引,如果它存在,代码如下:
ArrayList<String> historyValues = new ArrayList<String>();
ArrayList<String> historyLabels = new ArrayList<String>();
some_big_process_which_populates_array()
if(historyLabels.size() >= 1 && historyValues.size() >= 1 ){
historyLabels.add("Not enough data yet");
historyValues.add("0.0");
}else{
Log.v("history_values", historyValues.toString());
historyValues.remove(0);
historyLabels.remove(0);
}
错误。空数组如何通过size()
检查?
06-18 15:36:53.208 1510815108/com.rainforestautomation.android.energyvue V/history_values﹕ []
06-18 15:36:53.208 15108-15108/com.rainforestautomation.android.energyvue D/AndroidRuntime﹕ Shutting down VM
06-18 15:36:53.209 15108-15108/com.rainforestautomation.android.energyvue E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.rainforestautomation.android.energyvue, PID: 15108
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
编辑:
看来我改变了我的逻辑。
答案 0 :(得分:6)
你的比较被颠倒了。
if(historyLabels.size() >= 1 && historyValues.size() >= 1 ){
应该是
if(historyLabels.size() < 1 && historyValues.size() < 1 ){
答案 1 :(得分:1)
if(historyLabels.size() >= 1 && historyValues.size() >= 1 )
==&gt;一个空集合的大小为0,因此不匹配&gt; = 1.这就是为什么它会转到else
,你尝试删除空集合的第一个元素。
答案 2 :(得分:0)
historyValues.remove(0);
你要移除第一个元素,但是如果你在else子句中你没有元素(因为>= 1
失败了,这意味着列表是空的。)
答案 3 :(得分:0)
如果大于1,则删除索引。
所以在其他情况下,大小可能为0,而arraylist为空