我知道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]);
}
}
}
这是控制台:
答案 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行放置调试器断点,那么您将能够确切地看到导致异常的值。