在Java中打印数组时出现异常

时间:2015-02-28 21:12:44

标签: java arrays

我知道C,现在正试图利用Java。

这是一个简单的程序,它通过一个循环并改变“str”数组中的东西。当我试图按照我以前在C中的方式打印它时,它可以工作,但也给了我一个例外。那是为什么?

public class ReverseStringLG {

    public static void main(String[] args) {
        char[] str={'A', 'B', 'C', 'D', 'E', 'F'};
        char[] strLG={'L', 'G', 'L', 'G', 'L', 'G'};

        int i, j, k=1;

        for(j=0, i=str.length-1;i>j;j++, i--)
        {
        char tmp;
        tmp=str[j];

        if(j%2==0)
            str[j]=strLG[j];
        else
            str[j]=str[--i];

        str[i++]=tmp;
        k++;
        }
        for(i=0;i<=str.length;i++)
        {
            System.out.printf("%c\n", str[i]);
        }
    }

}

这是控制台:

enter image description here

5 个答案:

答案 0 :(得分:3)

将其更改为for(i=0; i<str.length; i++)

您不应该尝试访问索引str.length处的元素。

答案 1 :(得分:1)

因为数组从索引0开始,i永远不能与str.length相同,因为数组中str.length的值的索引不存在,总是一个小,这就是为什么你得到ArrayIndexOutOfBoundsException

for(i = 0;i <= str.length;i++) {
    System.out.printf("%c\n", str[i]);
}

这应该是

for(i = 0;i < str.length;i++) {
    System.out.printf("%c\n", str[i]);
}

答案 2 :(得分:0)

试试这个:

使用增强的for循环,这应该很简单:

for(String string:str){
 System.out.printf("%c\n", string);
}

答案 3 :(得分:0)

在这个循环中:

    for (i = 0; i <= str.length; i++) {
        System.out.printf("%c\n", str[i]);
    }

您正在迭代超出数组的范围。 如果长度为6,则会访问str[0]str[1],...,str[6], 所以7个元素,但你只有6个。 这在C中也不起作用。

修复方法是将<=更改为严格<,因为您不想访问str.length元素:

    for (i = 0; i < str.length; i++) {
        System.out.printf("%c\n", str[i]);
    }

更好, 使用增强的for循环语法:

    for (char c : str) {
        System.out.printf("%c\n", c);
    }

这样就不会再与数组索引混合了。

答案 4 :(得分:0)

如其他答案中所述,您尝试访问的索引大于字符串的最后一个索引。

为了将来参考,请注意异常会告诉您它在(26)处出现的行,并且具有名称ArrayIndexOutOfBoundsException,其面值描述错误,但可以与Javadoc一起使用以获得更多有关该错误的信息。

如果在IDE中的第26行放置调试器断点,那么您将能够确切地看到导致异常的值。