0

私は来月のテストのために勉強していて、いくつかの基本的な問題を調べています。これは、いくつかの文を入力し、特定の文字列(この場合は「pattern」)を含む文を再印刷する必要があるプログラムです。

私の試みは以下のとおりであり、コンパイルされますが、実行しようとすると次のエラーが発生します。

   Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Grep.main(Grep.java:18)
import java.util.Scanner;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Grep {

    public static void main(String[] args) {

        Pattern pattern = Pattern.compile("[Pp]attern");
        String sentences[] = new String[10];
        Scanner scanner = new Scanner(System.in); 

        System.out.println("Please enter some sentences: ");

        for (int i = 0; i <= sentences.length; i++) {
            String s = scanner.next(); 
            sentences[i] = s;
        }

        for (int i = 0; i < sentences.length; i++) { 
            Matcher matcher = pattern.matcher(sentences[i]);
            while (matcher.find()) {
                System.out.println(sentences[i]);
            }
        }
    }
}
4

5 に答える 5

3
for (int i = 0; i <= sentences.length; i++) {

配列にはいくつの項目がありますか? 最後のインデックスは何ですか?ループが最後に使用したインデックスは? あなたのループは合計でいくつの文にアクセスしますか?

于 2012-08-02T05:27:55.540 に答える
0
for (int i = 0; i <= sentences.length; i++) {

0 から開始し、10 個のアイテムがあるため、0 から 9 に移動<=する必要があるためです。<i

于 2012-08-02T05:28:08.083 に答える
0

試す

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

そして、あなたは大丈夫です:)

于 2012-08-02T05:29:01.520 に答える
0

問題は:18あなたのコードの行にありますfor (int i = 0; i <= sentences.length; i++)for (int i = 0; i < sentences.length; i++)

あなたのコードの次の forループであなた自身が<代わりに使用しているように<=

于 2012-08-02T05:33:02.640 に答える
0

これを試して。できます。

ヒント: 入力が完全な文を読み取るように、必ず nextLine() を使用してください。そして、for ループ内の if ステートメントに while ループを切り替えました。そこに 2 つのループは必要ありません。また、最初の for ループを 1 行にまとめました。一瞬だけ必要な場合は、文字列変数を作成する必要はありません。そのステップを完全にスキップして、要点に到達してください! 頑張ってください、これが役に立てば幸いです!

以下は、あなたのものをミラーリングするプログラムですが、現在は機能しています

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Grep 
{
    public static void main(String[] args) 
    {
        Pattern pattern = Pattern.compile("[Pp]attern");
        String sentences[] = new String[3];
        Scanner scanner = new Scanner(System.in);

        System.out.println("Please enter some sentences: ");

        for (int i = 0; i < sentences.length; i++) 
            sentences[i] = scanner.nextLine();

        for (int i = 0; i < sentences.length; i++) 
        { 
            Matcher matcher = pattern.matcher(sentences[i]);
            if (matcher.find()) 
                System.out.println(sentences[i]);
        }
    }
} 

以下は、この同じプログラムの書き方です。説明のために含まれるコメント

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Grep 
{
    public static void main(String[] args) 
    {
        // Initialize and Declare Variables
        Pattern pattern = Pattern.compile("[Pp]attern");
        String sentences[] = new String[3];
        Scanner scanner = new Scanner(System.in);
        int foundCount = 1;


        // Present A Title For The End User
        System.out.println("This Program Will Catch Sentences With The Term Pattern.\n");


        // Read The Inputs From The Users
        for (int i = 0; i < sentences.length; i++)
        {
            System.out.print("Enter Sentence #" + (i+1) + ":  ");
            sentences[i] = scanner.nextLine();
        }


        // Line Break
        System.out.println();


        // Write Sentences That Include The Term Pattern
        for (int i = 0; i < sentences.length; i++) 
        { 
            Matcher matcher = pattern.matcher(sentences[i]);
            if (matcher.find())
            {
                System.out.println(foundCount + ")  " + sentences[i]);
                foundCount++;
            }
        }
    }
}
于 2012-08-02T05:34:39.013 に答える