在此处获取数组索引超出范围的异常

时间:2014-06-22 07:50:23

标签: java indexoutofboundsexception

String resultArr[] = response.split("&");
String[] values = resultArr;
String name[] = new String[values.length/2];

for(int i = 0;i<values.length-1;i++)
{
    if(i%2==0)
    {
        name[i] = values[i];
    }
}

4 个答案:

答案 0 :(得分:4)

这是问题所在:

name[i] = values[i];

您的name数组只是values数组的一半,但您尝试使用相同的索引。我怀疑你想要:

name[i / 2] = values[i];

或者在我看来更可读:

// Note consistency of naming and how the type is specified 
String[] namesAndValues = response.split("&");
if (namesAndValues.length % 2 != 0)
{
    throw new IllegalArgumentException("Uneven name/value pair length");
}
String[] values = new String[namesAndValues.length / 2];
String[] names = new String[values.length];

for (int i = 0; i < values.length; i++)
{
    names[i] = namesAndValues[i * 2];
    values[i] = namesAndValues[i * 2 + 1];
}

答案 1 :(得分:1)

您所做的基本上是将所有偶数值存储到名称中 但与此同时,您只将其存储在名称的偶数值中。 试试这个: -

if(i%2==0) { name[i/2] = values[i]; }

答案 2 :(得分:0)

您的name数组大小为values的一半,并且您正在迭代length values并将值分配给name数组。

罪犯是String[] name = new String[values.length/2];&amp; name[i] = values[i];

如果您的response字符串包含一个&,那么您的代码就可以使用,但是对于&容器中response的更多数量,它会引发index out of bound例外。

答案 3 :(得分:-2)

尝试更改String [] values = resultArr; 对此 String [] values = resultArr [];