2012-04-10 1 views
0

Ich arbeite gerade an meiner Java-Aufgabe und habe eine Mauer getroffen, für die ich einfach keine Lösung finde - ich bin nicht unbedingt auf der Suche nach einer Antwort einige Ideen zu welchen Tools könnte mir helfen :) Anyway here goes:Wie man ein Kalenderobjekt in einem Objekt innerhalb einer ArrayList erstellt

Wie der Titel sagt, ich suche ein Kalenderobjekt innerhalb eines Objekts innerhalb einer Arraylist erstellen. Grundsätzlich dachte ich, dass beim Erstellen einer Instanz des Terminobjekts die Verknüpfung zwischen dem Kalenderobjekt und dem Terminobjekt getrennt würde und ich das Kalenderobjekt für das nächste Terminobjekt wiederverwenden könnte. Leider behält jedes Objekt seinen Verweis auf das Kalenderobjekt bei, anstatt eine eigene Instanz des Kalenderobjekts =/zu erstellen.

Einige Hintergrundinformationen über die Arbeit:

Grundsätzlich ist dieses Stück Java-Code, um die Datei scannt und extrahiert die Daten aus ihm heraus, stellt sicher, dass seine Gültigkeit dann in der man eine Instanz des entsprechenden Objekts erstellt von die zwei Arraylisten. Ich arbeite innerhalb der Beschränkungen meines Tutors, der spezifiziert hat, dass ich eine arraylist verwenden muss. Jede Hilfe würde sehr geschätzt werden.

Der Konstruktor für die Ernennung Klasse: öffentlichen Termin (Patient Patient, Provider-Provider, GregorianCalendar Datum, boolean Standard, boolean besucht)

Beispiel Termindaten Termin # 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"); 
     } 
    } 

Antwort

1

Nun senden Sie dasselbe Objekt an jeden Termin. Wenn ich es richtig verstehe, möchte jeder Termin ein anderes Kalenderobjekt haben. Wenn ja, einfach den Kalender jedes Mal neu erstellen, wenn der Termin erstellt wird, entweder im Terminkonstruktor oder in der Methode ...

bearbeiten: oh, ich habe vergessen, Kalender ist Singleton. Dann würde ich vorschlagen, nur java.util.Date Objekt in einem Termin zu halten - Calendar.getTime() erstellt neue Instanz von Date.

Dann können Sie es als Kalender im Getter Kleid -

public Calendar getAppointmentCalendar() 
{ 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(this.appDate); 
    return cal; 
} 
+0

Solch eine einfache Lösung - danke. Ich bin immer noch dabei, Möglichkeiten zu finden, wie Sie Objekte referenzieren und erstellen. – Fallz

+0

Sie sind willkommen, viel Glück für Sie –

1

Das Problem ist, dass gleiche Kalenderinstanz übergeben bekommen jedes Mal Konstruktor. Instanziieren Sie eine neue Kalenderinstanz in der for-Schleife, in der Sie den Termin der Liste hinzufügen. Das Übergeben einer neuen Instanz würde Ihr Problem lösen.

Verwandte Themen