0

私のJava割り当てに取り組んでいて、レンガの壁にぶつかっただけで、解決策を見つけることができないようです-私は必ずしも答えを探しているわけではなく、どのツールが私を助けるかもしれないかについてのいくつかのアイデアさえあります:)とにかくここに行きます:

タイトルが示すように、私はArraylist内のオブジェクト内にカレンダーオブジェクトを作成しようとしています。基本的に、以下のコードのように-Appointmentオブジェクトのインスタンスが作成されると、calendarオブジェクトと予定オブジェクトの間のリンクが切断され、Calendarオブジェクトを次の予定オブジェクトに再利用できると思いました。残念ながら、各オブジェクトは、Calendarオブジェクトの独自のインスタンスを作成するのではなく、calendarオブジェクトへの参照を保持します=/。

仕事の背景:

基本的に、このJavaコードは、ファイルをスキャンして情報を抽出し、有効であることを確認してから、2つの配列リストのいずれかに適切なオブジェクトのインスタンスを作成します。私は、配列リストを使用する必要があると指定した講師の制約の範囲内で作業しています。どんな助けでも大歓迎です。

アポイントメントクラスのコンストラクター: public Appointment(患者患者、プロバイダープロバイダー、GregorianCalendar日付、ブール標準、ブール出席)

アポイントメントデータの例アポイントメント #84736254193#123456AF#22.30#20/12/2012#false#True

public AppointmentsManager (String path) {

        this.path = path;
        String[] fileLine;
        boolean throwError = false;
        DateFormat df = new SimpleDateFormat ("HH.mm dd/MM/yyyy");
        df.setLenient(false);
        GregorianCalendar calendar = new GregorianCalendar();

        try {
            Scanner input = new Scanner(new File(path));
            String line;

            while (input.hasNext()) {

                line = input.nextLine();
                fileLine = line.split("#");

                if (fileLine.length < 0) 
                    throw new IllegalArgumentException("Error: the data in the file is has not been delimited correctly. Please review");

                if (fileLine[0].matches("Provider")) {
                    if (fileLine.length < 7)
                        throw new IllegalArgumentException("Error: the provider data in the file is incomplete. Please review");     

                    persons.add(new Provider(fileLine[1], fileLine[2], fileLine[3], fileLine[4], fileLine[5],
                            fileLine[6])); 
                }  
                else if (fileLine[0].matches("Patient")) {
                    fileLine = line.split("#"); 

                    if (fileLine.length < 11)
                        throw new IllegalArgumentException("Error: the patient data in the file is incomplete. Please review");  


                    for (int i = 0; i < persons.size(); i++) {  


                        if (persons.get(i).getMedicare().matches(fileLine[10])) {

                            persons.add(new Patient(fileLine[1], fileLine[2], fileLine[3], fileLine[4], fileLine[5],
                                    fileLine[6], fileLine[7], fileLine[8], Integer.parseInt(fileLine[9]),(Provider)persons.get(i)));
                            throwError = true;
                        }
                    }
                    if (throwError!=true) {
                        throw new IllegalArgumentException("Error: the provided Provider does not exist for Patient: " + fileLine[2]+", "+fileLine[1] +". Please review");
                    }
                }
                else if (fileLine[0].matches("Appointment")) {
                    fileLine = line.split("#");


                    if (fileLine.length < 7)
                        throw new IllegalArgumentException("Error: the appointment data in the file is incomplete. Please review");  

                    if (!"true".equals(fileLine[5].toLowerCase()) && !"false".equals(fileLine[5].toLowerCase())) 
                        throw new IllegalArgumentException("Error: the appointment data in the file is incorrect. Please review");

                    if (!"true".equals(fileLine[6].toLowerCase()) && !"false".equals(fileLine[6].toLowerCase())) 
                        throw new IllegalArgumentException("Error: the appointment data in the file is incorrect. Please review");


                    //parse the fileLine parameters
                    calendar.setTime(df.parse(fileLine[3] + " " + fileLine[4]));



                    for (int i = 0; i < persons.size(); i++) {
                        if (persons.get(i).getMedicare().matches(fileLine[1])) {

                            for (int j = 0; j < persons.size(); j++) {
                                if (persons.get(j).getMedicare().matches(fileLine[2])) {

                                    appointments.add(new Appointment((Patient) persons.get(i), (Provider) persons.get(j), calendar,
                                            Boolean.parseBoolean(fileLine[5]), Boolean.parseBoolean(fileLine[6]))); 
                                    throwError = true;
                                }
                            }
                        }
                    }
                    if (throwError!=true) {
                        throw new IllegalArgumentException("Error: the provided Provider or Patient does not exist in the system. Please review");
                    }
                }
                else 
                    throw new IllegalArgumentException("Error: the data provided does not match a person, provider or appointment. Please review");
            } 
            input.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException pe) {
            // TODO Auto-generated catch block
            throw new IllegalArgumentException("Error: the appointment date and time in the file is incorrect. Please review");
        }
    }   
4

2 に答える 2

1

The issue is that same calendar instance is getting passed to constructor each time. Instantiate a new Calendar instance inside the for loop where you are adding the appointment to the list. Passing a new instance would solve your issue.

于 2012-04-10T10:25:44.820 に答える
1

さて、あなたは各予定に同じオブジェクトを送っています。私が正しく理解していれば、各予定に異なるカレンダーオブジェクトを設定する必要があります。その場合は、予定コンストラクターまたはメソッドのいずれかで、予定が作成されるたびにカレンダーを再インスタンス化するだけです...

編集:ああ、私は忘れました、カレンダーはシングルトンです。次に、java.util.DateオブジェクトのみをAppointmentに保持することをお勧めします-Calendar.getTime()はDateの新しいインスタンスを作成します。

次に、ゲッターでカレンダーとしてドレスアップできます-

public Calendar getAppointmentCalendar()
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(this.appDate);
    return cal;
}
于 2012-04-10T10:18:24.730 に答える