【问题标题】:Why is my int[] array loop out of bounds?为什么我的 int[] 数组循环越界?
【发布时间】:2014-11-17 23:56:45
【问题描述】:

警告: 我对 Java 和一般编程非常陌生。我会尽量说清楚。

我正在尝试获取一个简单的整数 (inputnumber),将其转换为字符串 (temp),创建一个新的 int[] 数组 (numberarray),然后循环遍历这个 int[] 数组,从最后一个数字开始,并打印出该数字的名称。

我很确定由于 Eclipse 调试,从整数到字符串到 int[] 数组的转换是正常的,但是我很难理解为什么我会从 Eclipse 中得到一个针对如此简单的 for 循环的 ArrayOutOfBounds 消息。任何关于我做错了什么的线索都值得赞赏。

    String temp = inputnumber.toString();
    int[] numberarray = new int[temp.length()];

    for (int i=0;i<temp.length();i++) {
        numberarray[i] = temp.charAt(i);
    }


    for (int i=temp.length();i>0;i--) {

        if (numberarray[i]==1) System.out.print("one.");
        if (numberarray[i]==2) System.out.print("two.");
        if (numberarray[i]==3) System.out.print("three.");
        if (numberarray[i]==4) System.out.print("four.");
        if (numberarray[i]==5) System.out.print("five.");
        if (numberarray[i]==6) System.out.print("six.");
        if (numberarray[i]==7) System.out.print("seven.");
        if (numberarray[i]==8) System.out.print("eight.");
        if (numberarray[i]==9) System.out.print("nine.");
        if (numberarray[i]==0) System.out.print("zero");
    }

我得到的 Eclipse 错误消息是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at jt.Intermediate8.main(Intermediate8.java:44)

【问题讨论】:

    标签: java arrays for-loop indexoutofboundsexception


    【解决方案1】:

    数组在 Java 中是 0 索引的。这意味着最后一个值位于索引 NUMBER_OF_ELEMENTS - 1

    因此,在您的for 循环中,您应该更改

    int i=temp.length()     // this is last index + 1 (since we are starting from 0)
    

    收件人:

    int i=temp.length() - 1 // this is last index
    

    另外,正如 @brso05 所说,不要忘记将循环结束条件更改为 i&gt;=0,因为最后一个向后的值将位于索引 0。

    您的for 循环:

    for (int i = temp.length(); i >= 0; i--)
    

    【讨论】:

    • 感谢您帮助我解决最明显的问题。 +1。
    • 如果您想点击所有元素,请确保使用 i>=0 而不是 i>0,否则您将跳过第一个元素(请参阅我的帖子)。
    【解决方案2】:

    您在 temp.length() 处开始循环。这不是一个有效的索引。也许你想要 temp.length()-1?

    【讨论】:

      【解决方案3】:

      您应该执行 temp.length() - 1。原因是数组以索引 0 而不是 1 开始,因此数组中的最后一个元素存储在长度 - 1 处。如果有 10 个元素,则 0- 9 是您的索引。如果要命中所有元素,也将 i>0 更改为 i>=0。

      for (int i=(temp.length() - 1);i>=0;i--) {
      

      【讨论】:

        最近更新 更多