0

私はクラスのためにこの小さなハードウェアの問題をやっています。私のプログラムのポイントは、ユーザー入力からフレーズ内のすべての空白文字をカウントすることです。for ループに到達するまで、すべて問題ありません。ループにブレーク ポイントを設定すると、罰金が実行され、空白文字がカウントされます。しかし、ループが終了すると、プログラムがクラッシュし、次のエラーが表示されます。

スレッド「メイン」の例外 java.lang.StringIndexOutOfBoundsException: 文字列インデックスが範囲外です: 5

誰かが私を正しい方向に向けることができるかどうかはよくわかりません。

import java.util.Scanner;
public class Cray {
    public static void main(String[] args){
              String phrase;    // a string of characters
              int countBlank;   // the number of blanks (spaces) in the phrase 
              int length;       // the length of the phrase
              char ch;          // an individual character in the string

            Scanner scan = new Scanner(System.in);

              // Print a program header
              System.out.println ();
              System.out.println ("Character Counter");
              System.out.println ();

              // Read in a string and find its length
              System.out.print ("Enter a sentence or phrase: ");
              phrase = scan.nextLine();
              length = phrase.length();

              // Initialize counts
              countBlank = 0;

              // a for loop to go through the string character by character
              // and count the blank spaces

              for(int i =0; i<=length; i++ ){
                  if(phrase.charAt(i)==' '){
                      countBlank++;

              }
              }


              // Print the results
              System.out.println ();
              System.out.println ("Number of blank spaces: " + countBlank);
              System.out.println ();
            }
        }
4

3 に答える 3

1

少し与えられた答えを詳しく説明して説明するには:

ループの条件:

for(int i =0; i<=length; i++ )

プログラムに次のことを行うように指示します。

  1. 'length'項目の配列を取り、その0番目の要素から開始します。
  2. 0番目の要素を処理します
  3. 次のi番​​目の要素に移動し、それも処理します。
  4. index = lengthの要素に到達するまで、手順3を繰り返します。

繰り返し処理する配列は、定義上、ステップ4で失敗する必要があります。配列には0から始まるインデックスが付けられるため、「n」要素を持つ配列の最大インデックスは「n-1」になります。

于 2012-10-12T22:05:57.770 に答える
1

String の長さを超える文字を読み取ろうとしていますphrase。修正するには、次を使用できます。

for (int i = 0; i < length; i++) {
于 2012-10-12T22:02:06.330 に答える
0

実際、スキャナーはスペースを無視するので、BufferedReader を使用します

public static void main(String[] args) throws IOException {

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     String word=null;
    System.out.println("Enter string input: ");
    word = br.readLine(); 
    String data[] ;
    int k=0; 
    data=word.split("");
    for(int i=0;i<data.length;i++){
        if(data[i].equals(" ")) 
        k++; 
    } 
    if(k!=0)        
    System.out.println(k);
    else
        System.out.println("not have space");

}
于 2013-02-08T22:21:26.340 に答える