快速提问。我在程序中有这个代码:
input = JOptionPane.showInputDialog("Enter any word below")
int i = 0;
for (int j = 0; j <= input.length(); j++)
{
System.out.print(input.charAt(i));
System.out.print(" "); //don't ask about this.
i++;
}
i
是整数,其值为0,如图所示运行代码会产生此错误:
线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:6
在java.lang.String.charAt(未知来源)
在program.main(program.java:15)
如果我将charAt
int
更改为0而不是i
,则不会产生错误...
可以做些什么?有什么问题?
答案 0 :(得分:5)
替换:
j <= input.length()
...与......
j < input.length()
Java String
字符索引从0开始,因此循环终止条件应为input
的长度 - 。
目前,当你的循环在终止前达到倒数第二次迭代时,它会在等于input
长度的索引处引用input
个字符,这会抛出StringIndexOutOfBoundsException
(a {{1 }})。
答案 1 :(得分:3)
Java中的字符串索引(与任何其他类似数组的结构一样)从零开始。这意味着input.charAt(0)
是最左边的字符。最后一个字符位于input.charAt(input.length() - 1)
。
因此,您在for
循环中引用了太多元素。将<=
替换为<
进行修复。如果您将代码移植到C ++(具有无符号类型),替代方法(<= input.length() - 1
)可能会让您感到困难。
顺便说一下,Java运行时会发出非常有用的异常和错误消息。要学会阅读和理解它们。
答案 2 :(得分:1)
将循环条件j <= input.length()
替换为j < input.length()
,因为Java中的字符串遵循基于零的索引。
例如字符串"india"
的索引将从0开始。
答案 3 :(得分:0)
您正在从[0-length]访问数组,您应该从[0-(length-1)]
执行此操作int i = 0;
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(i));
System.out.print(" "); //don't ask about this.
i++;
}
答案 4 :(得分:0)
尝试以下方法:
j< input.length()
然后:
int i = 0;
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(i));
System.out.print(" "); //don't ask about this.
i++;
}
答案 5 :(得分:0)
使用此功能;
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(j));
System.out.print(" "); //don't ask about this.
}
答案 6 :(得分:0)
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(j));
System.out.print(" "); //don't ask about this.
}