索引超出界限,但不是?

时间:2015-06-18 22:39:15

标签: java android

我不知道这是怎么回事,也许我错过了一些简单的事情。

我试图删除第一个索引,如果它存在,代码如下:

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)

编辑:

看来我改变了我的逻辑。

4 个答案:

答案 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为空