0

プログラムの問題をトラブルシューティングしようとしていますが、修正方法がわかりません。問題は、レポートの出力を表示しようとしている方法にあると思います-ID#が表示され、名前:姓、名、Sys.out.print行に「学生名」と表示されてレポートが実行される場合+ 配列[2] + 配列[1]。

この問題を解決するにはどうすればよいですか? レポートを実行しようとしたときにのみ発生します。学生の情報を入力する際に​​作成されるテキストファイルは正しく行われます。

/** * ファイル名: LowerAndUpperDisplay.java * 作成日: 2013 年 10 月 31 日 * 作成者: * 目的: LowerAndUpper アプリケーションを拡張して、enter code here各レコードを * 下位クラスマン ファイルから、次に上位クラスマン ファイルから 1 つずつ表示するようにします。* 各リストを紹介する見出しを表示します。* * 各レコードについて、ID 番号、姓、名、取得単位数、および卒業に必要な追加単位 * 数を表示します。卒業には120単位が必要だとします。*/

import java.util.Scanner;
import java.nio.file.*;
import java.io.*;

public class LowerAndUpperDisplay {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        Path lowerClassmanFile = Paths.get("C:/temp/lowerclassman.txt");

        Path upperClassmanFile = Paths.get("C:/temp/upperclassman.txt");

        char choice;

        int idNum;

        int totalCredits;

        String first;

        String last;

        String classStanding = " ";

        try

        {
            OutputStreamWriter lWriter = new OutputStreamWriter(
                    new BufferedOutputStream(Files.newOutputStream(
                            lowerClassmanFile, StandardOpenOption.CREATE)));

            BufferedWriter lowerClassmanWriter = new BufferedWriter(lWriter);

            OutputStreamWriter uWriter = new OutputStreamWriter(
                    new BufferedOutputStream(Files.newOutputStream(
                            upperClassmanFile, StandardOpenOption.CREATE)));

            BufferedWriter upperClassmanWriter = new BufferedWriter(uWriter);

            do {

                System.out
                        .print("Student Records "
                                + "\nTo enter student records, type S.  For a report, type R.  To exit, type Q.");

                choice = input.nextLine().charAt(0);

                switch (choice)

                {
                case 'S':

                    System.out.println("Please enter student information.");

                    System.out.print("ID Number: ");

                    idNum = input.nextInt();

                    input.nextLine();

                    System.out.print("First Name: ");

                    first = input.nextLine();

                    System.out.print("Last Name: ");

                    last = input.nextLine();

                    System.out.println("Credit Hours Earned: ");

                    totalCredits = input.nextInt();

                    input.nextLine();

                    classStanding = "ID Number " + idNum + ", Student Name: "
                            + last + ", " + first + " Credit Hours: "
                            + totalCredits;

                    if (totalCredits >= 60) {

                        upperClassmanWriter.write(classStanding);

                        upperClassmanWriter.newLine();
                    }

                    else {

                        lowerClassmanWriter.write(classStanding);

                        lowerClassmanWriter.newLine();
                    }

                    break;

                case 'R':

                    try {

                        InputStreamReader lReader = new InputStreamReader(
                                new BufferedInputStream(Files
                                        .newInputStream(lowerClassmanFile)));

                        BufferedReader reader1 = new BufferedReader(lReader);

                        InputStreamReader uReader = new InputStreamReader(
                                new BufferedInputStream(Files
                                        .newInputStream(upperClassmanFile)));

                        BufferedReader reader2 = new BufferedReader(uReader);

                        System.out
                                .print("The lower classmen are:  ");

                        classStanding = reader1.readLine();

                        String[] array;

                        while (classStanding != null) {

                            array = classStanding.split(",");

                            totalCredits = Integer.parseInt(array[3]);

                            System.out.print("ID Number " + array[0]);

                            System.out.print("Student name " + array[2] + ", " + array[1]) ;

                            System.out.print("Total credits: " + totalCredits);

                            System.out.print("This student is " + (120 - totalCredits) 
                                    + " credits short of earning their degree.");

                            classStanding = reader1.readLine();

                        }// end while

                        reader1.close();

                        System.out.print("The upper classmen are:  ");

                        classStanding = reader2.readLine();

                        while (classStanding != null) {

                            array = classStanding.split(",");

                            totalCredits = Integer.parseInt(array[3]);

                            //System.out.format("Student Id Number :", "");

                            System.out.print("ID Number " + array[0]);

                            System.out.print("Student name : " + array[2] + ", " + array[1]);

                            System.out.print("Total credits: " + totalCredits);

                            System.out.print("This student is  " + (120 - totalCredits) 
                                    + "credits short of earning their degree.");

                            classStanding = reader2.readLine();

                        }// end while

                        reader2.close();

                    } catch (Exception e) {

                        System.out.println("Message: " + e);

                    }
                case 'Q':

                    break;

                default:

                    System.out
                            .printf("You have made an invalid option.  Please enter a valid option. \n");

                }// end switch

            } while (choice != 'Q');

            lowerClassmanWriter.close();

            upperClassmanWriter.close();
        } catch (Exception e)

        {
            System.out
                    .println("The program has encountered an error.  Please notify your Systems Administrator"
                            + " of this error. " + e);
        }

    }// end

}// end class 
4

1 に答える 1

0

ArrayIndexOutOfBounds

classStanding = "ID Number " + idNum + ", Student Name: "
                        + last + ", " + first + " Credit Hours: "
                        + totalCredits;

array = classStanding.split(",");

totalCredits = Integer.parseInt(array[3]);

配列には 3 つのインデックスしかありません。最後が必要な場合は、array[2]代わりに を呼び出す必要がありarray[3]ます。

またarray[2]、 String" Credit Hours: " + totalCredits;です。それを解析することはできません。splitを取得するには、もう一度使用する必要があります。totalCredits

于 2013-11-03T22:31:29.857 に答える