【问题标题】:Getting array index out of bounds exception on this获取数组索引超出范围异常
【发布时间】:2014-06-22 07:50:22
【问题描述】:
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];
    }
}

【问题讨论】:

  • 这是什么语言?
  • 这在 values 数组有 2 个值时有效。我能够打印名称数组。当 values 数组超过 2 时,它会给我数组索引超出范围的异常。
  • 请在发帖时更加注意格式,并在问题中提供更多详细信息——您做了什么来诊断这个问题?
  • 感谢 Jon 的编辑。 :).. 我正在尝试将位置 0、2、4、6 的字符串从“值”数组复制到“名称”数组。它使数组索引超出范围。长度 = 3,索引 = 4跨度>
  • @user3477871:是的-该信息应该在您的问题中。纯代码问题通常不被接受;它们对未来的访问者没有多大用处。

标签: java indexoutofboundsexception


【解决方案1】:

这就是问题所在:

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];
}

【讨论】:

  • @Jon.. 你能帮我了解存储奇数的逻辑吗,就像上面存储偶数一样
  • @user3477871:您真的阅读了我回答的第二部分吗?它展示了如何在一个循环中提取名称和值...
  • :- 即将发布相同的内容:)。它本身在一个循环中工作!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    罪魁祸首是String[] name = new String[values.length/2]; & name[i] = values[i];

    如果您的 response 字符串包含单个 &amp;,则您的代码可以工作,但如果您的 response 容器中的 &amp; 数量更多,则会引发 index out of bound 异常。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-05
        • 2012-11-01
        • 1970-01-01
        相关资源
        最近更新 更多