0

指定した数のクラスの成績のログを作成し、このデータをテキストファイルに書き込むプログラムを作成しています。日付、クラス名、成績(または少なくともそうすべき)、および終了ステートメントを書き込みます。どういうわけかわからないのですが、私のプログラムは日付とクラス名しか出力しません。何か案は?

コードは次のとおりです。

        BufferedWriter data = null; //Writes Output

    try {

        File log = new File ("Grade.txt"); //Name of File
        FileWriter fileWriter = new FileWriter (log, true); //Appends File
        data = new BufferedWriter (fileWriter); //Creates BufferedWriter
        Date date = new Date (); //Sets Date

               //Code here makes an array of class names 

            System.out.print ("Enter Assignment Name:  ");
                title = reader.nextLine ();
                data.write (title);
                data.newLine (); //Blank Line
                reader.nextLine (); //Consume Input
                System.out.print ("Enter Points Possible:  ");
                temp = reader.nextInt();

                if (temp < 0){

                    throw new ArithmeticException ("");

                }else{

                    poss += temp;
                    data.write(poss);

                }//Close If

                System.out.print ("Enter Points Earned");
                temp = reader.nextInt();

                if (temp < 0){

                    throw new ArithmeticException ("");

                }else{

                    earn += temp;
                    data.write(earn);

                }//Close If
4

3 に答える 3

0

.close()プログラムが終了する前に、ライターやファイルはありません。ライターを閉じないと、その内部バッファーがファイルとディスクにフラッシュされることが保証されません。

Java7 を使用している場合は、try-with-resources を使用して便利で正確にすることができます。

try ( FileWriter fileWriter = new FileWriter (log, true); //Appends File
      BuferredWriter data = new BufferedWriter (fileWriter); //Creates BufferedWriter
    )
    {
    data.write("...");
    }
于 2013-03-22T00:51:23.237 に答える
0

ポイントを読んだ後、リーダーを次の行に移動します。reader.nextInt を使用すると、入力は数値のみを読み取り、Enter キーを押したときに作成される改行文字は読み取りません。reader.nextInt の後に reader.nextLine を呼び出すと、改行文字が読み取られ、バッファがクリアされます。

BufferedWriter data = null; //Writes Output

try {

    File log = new File ("Grade.txt"); //Name of File
    FileWriter fileWriter = new FileWriter (log, true); //Appends File
    data = new BufferedWriter (fileWriter); //Creates BufferedWriter
    Date date = new Date (); //Sets Date

           //Code here makes an array of class names 

        System.out.print ("Enter Assignment Name:  ");
            title = reader.nextLine ();
            data.write (title);
            data.newLine (); //Blank Line
            reader.nextLine (); //Consume Input
            System.out.print ("Enter Points Possible:  ");
            temp = reader.nextInt();
            reader.nextLine(); //added this

            if (temp < 0){

                throw new ArithmeticException ("");

            }else{

                poss += temp;
                data.write(poss);

            }//Close If

            System.out.print ("Enter Points Earned");
            temp = reader.nextInt();
            reader.nextLine(); //added this

            if (temp < 0){

                throw new ArithmeticException ("");

            }else{

                earn += temp;
                data.write(earn);

            }//Close If
于 2013-03-22T00:53:01.777 に答える
0

nextInt()メソッドは(終了行) 記号を離れ、次の入力をスキップして\nによってすぐに取得されます。nextLine()あなたがしたいことはnextLine()、すべてに使用し、後で解析することです:

String nextIntString = keyboard.nextLine(); //get the number as a single line
int nextInt = Integer.parseInt(nextIntString); //convert the string to an int

これは、問題を回避する最も簡単な方法です。「次の」方法を混在させないでください。onlynextLine()を使用してから s を解析するintか、後で単語を分離します。

また、システムリソースを節約するために、作業が終了したら常に使用close()する必要があります。BufferedWriter

于 2013-03-22T00:53:55.187 に答える