static char characters[] = { 'a', 'b', ' ', 'c', ' ', 'e', 'f', ' ' };
public static void main(String args[]) {
for (int i = 0; i < characters.length; i++) {
int j = i + 1;
if (characters[i] == ' ') {
while (j < characters.length && characters[j] == ' ' || characters[j] == '\u0000') {
j++; // increment j till a non-space char is found
}
}
}
for (char character : characters) {
System.out.print(character + " ");
}
}
Eclipse显示以下错误: 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:8 在loopchecker.main(loopchecker.java:13)
第13行是while loop
。但我已经在检查j's
值是否小于长度。
答案 0 :(得分:6)
这是因为or
运算符。
以下条件如下所示
(j < characters.length && characters[j] == ' ') || characters[j] == '\u0000'
所以你总是执行or或条件,因为and
运算符优先于or
运算符导致ArrayOutOfBoundException.
您可能希望在while条件中包含大括号。< / p>
while (j < characters.length && (characters[j] == ' ' || characters[j] == '\u0000'))
答案 1 :(得分:3)
您需要在while
语句中添加一些括号:
while (j<characters.length && (characters[j] == ' ' || characters[j] == '\u0000'))
否则,Java的order of operations将其视为
while ((j<characters.length && characters[j] == ' ') || characters[j] == '\u0000')
这意味着如果第一部分为假,仍将评估characters[j]
。
答案 2 :(得分:2)
鉴于评论中你想说//increment j till a non-space char is found
,我会说你应该摆脱:
while (j<characters.length && characters[j] == ' ' || characters[j] == '\u0000')
由于在||
之后评估&&
的问题导致您的错误,并将其替换为:
while (j<characters.length && Character.isWhitespace(characters[j]))
这解决了您的问题以及更方便地处理空白问题。
答案 3 :(得分:1)
characters[j] == '\u0000'
部分没有检查以确保j小于长度。加上像j < characters.length && (.. || ..)
答案 4 :(得分:0)
这是因为OR运算符。 以下是完整的解决方案。
package com.java;
public class ArraySample
{
static char characters[]={'a','b',' ','c',' ','e','f',' '};
public static void main (String args[])
{
for (int i = 0; i < characters.length; i++) {
int j = i + 1;
if (characters[i] == ' ') {
while (j < characters.length && (characters[j] == ' ' || characters[j] == '\u0000')) {
j++; //increment j till a non-space char is found
}
}
}
for(int i = 0; i< characters.length; i++)
{
System.out.print(characters[i]+" ");
}
}
}
答案 5 :(得分:0)
{{1}}