1

テキスト ファイルから入力を読み取るためのプログラムを作成しています。ファイルの最後に到達したら、コンソールから入力を取得する必要があります。コードを書きましたが、正しく動作していないようです。誰か提案はありますか?

public static void main(String args[]) {
    PQHeap newsFeed = new PQHeap();
    if (args.length < 2) {
        System.out.println("Usage: java NewsFeed inputFile commandFile");
    }
    if (args.length == 2) {
        try {
            BufferedReader input = new BufferedReader(new FileReader(
                    args[0]));
            String line;

            while ((line = input.readLine()) != null) {
                String[] tokens = line.split(",");
                int like = Integer.parseInt(tokens[1]);
                int age = Integer.parseInt(tokens[2]);
                newsFeed.insert(tokens[0], like, age);
            }

            BufferedReader command = new BufferedReader(new FileReader(
                    args[1]));
            BufferedReader commIn = new BufferedReader(
                    new InputStreamReader(System.in));
            boolean done = false;
            String Input = null;
            while (!done) {
                Input = null;
                System.out.println("Enter a command - a, i, l, p or q: ");
                if ((Input = command.readLine()) == null) {
                    Input = commIn.readLine();
                }

                if (Input.length() > 0) {
                    char choice = Input.charAt(0); // strip off option
                                                    // character
                    String remainder = ""; // used to hold the remainder of
                                            // input
                    // trim off any leading or trailing spaces
                    remainder = Input.substring(1).trim();

                    switch (choice) {

                    case 'a':
                        newsFeed.insert(remainder, 0, 1);
                        break;

                    case 'i':
                        newsFeed.incrementDay();
                        break;

                    case 'l':
                        String[] tokens = remainder.split(",");
                        int id = Integer.parseInt(tokens[0]);
                        int likes = Integer.parseInt(tokens[1]);
                        newsFeed.increaseLikes(id, likes);
                        break;

                    case 'p':
                        if (remainder.length() == 0) {
                            newsFeed.displayTop(System.out, newsFeed.size());
                        } else {
                            newsFeed.displayTop(System.out,
                                    Integer.parseInt(remainder));
                        }
                        break;

                    case 'q':
                        // exit if user input 'x'
                        done = true;
                        break;

                    default:
                        System.out.println("Unknown Command");
                        break;
                    }

                }
            }

        } catch (FileNotFoundException e) {
            System.out.println("Cannot find the specified file");
            System.exit(0);
        } catch (IOException e) {
            System.out.println("Error: an input error has occured");
            System.exit(0);
        }
    }
}

しかし、ファイルの最後に到達した後、コンソールからすぐに入力を取得しません。ファイルの終わりに達した後の出力は次のとおりです

Enter a command - a, i, l, p or q: 
Enter a command - a, i, l, p or q: 
Enter a command - a, i, l, p or q: 
Enter a command - a, i, l, p or q: 
Enter a command - a, i, l, p or q: 
Enter a command - a, i, l, p or q: 
Enter a command - a, i, l, p or q: 
4

4 に答える 4

4

doneブール値は に変化しないため、true無限ループが発生します。

于 2012-12-05T05:47:15.557 に答える
0

実際にはコードに問題はありませんが、入力ファイルにエラーがあり、これらのエラーが発生します

于 2012-12-05T19:06:24.477 に答える
0

Enter a command - a, i, l, p or q:ファイルの行末をチェックするループの外で印刷しています。そのため、ファイルが読み取られているときに、その文字列をファイル内の合計行数として不必要に出力します。以下のコードを確認してください。お役に立てば幸いです。

class ReaderTest {
    public static void main(String... args) throws Exception {
        BufferedReader command = new BufferedReader(new FileReader("test.txt"));
        BufferedReader commIn = new BufferedReader(new InputStreamReader(System.in));
        boolean done = false;
        String Input = null;
        while (!done) {
            Input = null;

            if ((Input = command.readLine()) == null) {
                System.out.println("Enter a command - a, i, l, p or q: ");
                Input = commIn.readLine();
            }
        }
    }
}
于 2012-12-05T06:01:05.640 に答える
0
while (!done) 

あなたは更新を行っていません。それは間違っています。

このようなことをする

        while(!done){

            if((Input = command.readLine()) != null) {
              //not end of file
            }
            else
            {//end of file
                System.out.println("Enter a command - a, i, l, p or q: ");
                Input = commIn.readLine();
             }
        }
于 2012-12-05T05:48:28.997 に答える