1

私はJavaを学ぶのが初めてです。問題を解決するのを手伝ってください。私のコードの何が問題なのですか??? このコードを実行すると、エラー ArrayIndexOutOfBoundException が見つかります。助けてください。

public class SearchForFile {

static File file;
String[] args = null;
        public static void main(String args[]) {

            try {
                // Open the file c:\test.txt as a buffered reader

                BufferedReader bf = new BufferedReader(new FileReader("D:\\test.txt"));



                // Start a line count and declare a string to hold our current line.

                int linecount = 0;

                    String line;



                // Let the user know what we are searching for

                System.out.println("Searching for " + args[0] + " in file...");



                // Loop through each line, stashing the line into our line variable.

                while (( line = bf.readLine()) != null)

                {

                        // Increment the count and find the index of the word

                        linecount++;

                        int indexfound = line.indexOf(args[0]);



                        // If greater than -1, means we found the word

                        if (indexfound > -1) {

                             System.out.println("Word was found at position " + indexfound + " on line " + linecount);

                        }

                }



                // Close the file after done searching

                bf.close();

            }      

            catch (IOException e) {

                System.out.println("IO Error Occurred: " + e.toString());

            }

            }} 

このコードでは、このエラーのkindleが問題の解決に役立つことがわかりました

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at ForFile.main(ForFile.java:39)
4

2 に答える 2

3

常に防御的であり、失敗しないようにコードを設計する必要があります。失敗した場合は、正常に存在するか、正常に失敗します。

上記の問題を解決するには、2 つの方法があります。

最初:argアクセスする前にのサイズを確認してください

if (arg.length == 1) //Do Stuff with arg[0]

上記の if ステートメントを変更して好きなように解決することができます。たとえば、ユーザーに 3 つの引数を入力するように要求し、3 つの引数がないとプログラムを続行できないとします。試す:

if (arg.length != 3) //Stop the loop and tell the users that they need 3 args

2 番目:arg[0] try と catch でカプセル化するため、whileループ内に

try
{
    int indexfound = line.indexOf(args[0]);
    linecount++;
    if (indexfound > -1)
        System.out.println("Word was found at position " + indexfound + " on line " + linecount);

}
catch (ArrayIndexOutOfBoundsException e)
{
    System.out.println("arg[0] index is not initialized");
}

お役に立てれば。

于 2013-06-23T10:22:05.900 に答える