3

快速提问。我在一个程序中有这个代码:

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 的整数,如图所示

运行代码会产生此错误:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:6
at java.lang.String.charAt(Unknown Source)
at program.main(program.java:15)

如果我将 0 更改charAt int为 0 而不是i,它不会产生错误......
可以做什么?问题是什么?

4

7 回答 7

8

代替:

j <= input.length()

... 和 ...

j < input.length()

JavaString字符索引是从 0 开始的,所以你的循环终止条件应该是input's length - 1。

目前,当您的循环在终止前到达倒数第二次迭代时,它会input在等于input' 长度的索引处引用字符,这会引发StringIndexOutOfBoundsException(a RuntimeException)。

于 2014-03-24T13:48:53.033 回答
3

Java 中的字符串索引(与任何其他类似数组的结构一样)是从零开始的。这意味着这input.charAt(0)是最左边的字符。最后一个字符在input.charAt(input.length() - 1)

for因此,您在循环中引用了太多元素。替换<=<修复。<= input.length() - 1如果您曾经将代码移植到 C++(具有无符号类型),替代方案 ( ) 可能会让您难以接受。

顺便说一下,Java 运行时会发出非常有用的异常和错误消息。学习阅读和理解它们。

于 2014-03-24T13:50:52.723 回答
2

用 , 替换 for 循环条件j <= input.length()j < input.length()因为 Java 中的字符串遵循从零开始的索引。例如,字符串的索引"india"将从 0 开始到 4。

于 2014-03-24T14:06:05.820 回答
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++;
}
于 2014-03-24T13:48:45.550 回答
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++;
} 
于 2014-03-24T13:49:33.457 回答
0

用这个;

for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}
于 2014-03-24T13:50:15.997 回答
0
for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}
于 2014-03-24T13:51:25.993 回答