簡體   English   中英

為什么這個程序給我一個數組索引超出范圍的例外?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM