Java 我的程序给出了一个索引越界错误

Java 我的程序给出了一个索引越界错误,java,indexoutofboundsexception,Java,Indexoutofboundsexception,当我运行这个程序时,它给了我一个错误:索引超出界限。如何解决它?您没有在循环中更改a,因此a.isEmpty()不会更改,您将继续循环,直到I超出范围。你是说: int i=0; while(!a.isEmpty()) { if(a.toCharArray()[i]==' ') { System.out.println(a.toCharArray()[i]); } i++; }

当我运行这个程序时,它给了我一个错误:索引超出界限。如何解决它?

您没有在循环中更改
a
,因此
a.isEmpty()
不会更改,您将继续循环,直到
I
超出范围。你是说:

int i=0;    
while(!a.isEmpty()) {         
    if(a.toCharArray()[i]==' ') { 
        System.out.println(a.toCharArray()[i]);         
    }         
    i++;     
}     
while(i

另外,
a.toCharArray()[i]
可以(也应该)简单地成为
a.charAt(i)
(正如@MartijnCourteaux也指出的那样)。

您应该将循环改为:

while (i < a.length()) {
char[]c=a.toCharArray();

对于(i=0;i来说,已经有一些答案给出了问题的解决方案。这个答案是关于你如何自己发现问题的

循环中的大多数数组索引越界错误都是由于不正确的循环条件造成的,因此即使在索引到达循环结束后,该条件仍然为真。循环条件不依赖于
i
,因此它从
true
更改为
false
的唯一方法是
a
正在更改i在循环中插入

如果您希望
a
发生更改,则应该将
System.out.println(a)
放入循环中,并监视
a
的值。您会看到它没有更改


或者,如果
isEmpty
测试是一个输入错误,并且您打算测试依赖于
i
的内容,那么桌面检查您的循环条件应该已经找到了它。

为什么a不为空(或者曾经为空)?至少在问题中包括堆栈跟踪。不确定a是什么,但您从未从中删除任何内容,因此最终您将运行结束--它将永远不会变为空。使用
a.charAt(i)
而不是
a.tocharray()[i]
。它的性能提高了一万亿倍:)
char[] c=a.toCharArray();
for(i=0; i<c.length; i++){