[英]Why is this program giving me an array index out of bounds exception?
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
值是否小於長度。
這是因為or
運營商。
以下條件就是這樣的
(j < characters.length && characters[j] == ' ') || characters[j] == '\u0000'
所以你永諾執行或病症因的優先級and
操作者以上or
導致操作者ArrayOutOfBoundException.
您可能希望在while條件中包含大括號。
while (j < characters.length && (characters[j] == ' ' || characters[j] == '\u0000'))
您需要在while
語句中添加一些括號:
while (j<characters.length && (characters[j] == ' ' || characters[j] == '\u0000'))
否則,Java的操作順序將其視為
while ((j<characters.length && characters[j] == ' ') || characters[j] == '\u0000')
這意味着如果第一部分為假,仍將評估characters[j]
。
鑒於在評論中,你想說//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]))
這樣可以更方便地解決您的問題以及處理空白問題。
characters[j] == '\ '
部分沒有檢查以確保j小於長度。 放點j < characters.length && (.. || ..)
這是因為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]+" ");
}
}
}
static char characters[] = { 'a', 'b', ' ', 'c', ' ', 'e', 'f', 's' };
public static void main(String args[]) {
for (int i = 0; i < characters.length; i++) {
int j = i - 1 ; // The problem was here J was surpassing the characters length
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 + " ");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.