-3

java.lang.StringIndexOutOfBoundsException: String index out of range: 5 at java.lang.String.charAt(String.java:658) at Lab6.DataSentinelWhile3.main(DataSentinelWhile3 で.java:24)

public static void main(String[] args) {
        String sentence;
        char ch = 'a';
        int ind = 0, upperLetter=0, lowerLetter=0, digits=0, punctuation=0;

        Scanner input = new Scanner(System.in);
        System.out.print("Please enter a sentence (full-stop to terminate):");
        sentence = input.nextLine();
        while(ch != '.') {
            if(ch >= 'a' && ch <= 'z')
                lowerLetter++;
            else if(ch >= 'A' && ch <= 'Z')
                upperLetter++;
            else if(ch >= '0' && ch <= '9')
                digits++;
            else
                punctuation++;

            ind++; //increase the index of the sentence by 1
            ch = sentence.charAt(ind); //extract every character from sentence
        }

        System.out.print("\n\n*****Lexical Analysis of your Sentence*****" + 
        "\nLowercase letters: " + lowerLetter +
        "\nUppercase letters: " + upperLetter +
        "\nDigits: " + digits +
        "\nPunctuation symbols: " + (punctuation+1));
        input.close();
    }
4

3 に答える 3

1

このループを試してください

while(ind < 文の長さ) {

}

これを変える

ch = 文.charAt(ind); インド++;

于 2013-11-10T18:24:55.727 に答える
1

可能であれば forloop を使用すると、エラーの可能性が 10 倍減少します:, for while ループ:

     ind i = 0; 
     while(ind < sentence.length){
        ch = sentence.charAt(ind);
        if(ch == '.') break;
        if(ch >= 'a' && ch <= 'z')
            lowerLetter++;
        else if(ch >= 'A' && ch <= 'Z')
            upperLetter++;
        else if(ch >= '0' && ch <= '9')
            digits++;
        else
            punctuation++;
        ind++;
     }
于 2013-11-10T18:27:21.117 に答える
0

while(ch != '.')

文字列の長さにループを設定する必要があります。sentence最後のドット"."で終わらない場合は停止しません。

于 2013-11-10T18:22:38.047 に答える