Appointment planer vs NodeList

fiber

Bekanntes Mitglied
Hallo,

ich muss eine AppointmentPlaner erstellen, aber das problem ist folgendes:
ich darf keine Main Methode erstellen sondern muss die im JUnit testen..
das wäre machbar, kein Problem..
Aber Die einzelnen Methoden zu implementieren ohne eine vorhandene Liste ist etwas kniffelig.. wie kann ich bei so einem Fall vorgehen??
zB. : Wenn ich die items in der Node anzeigen will oder eine Appointment löschen will bzw hinzufügen will. Es existieren ja zu beginn keine Termine
 

eldrior

Aktives Mitglied
Du kannst mithilfe von Mocking entsprechende Objekte erstellen, die du einfügen kannst. Diese kannst du löschen oder hinzugügen, wie du willst.
Du kannst auch (oder zusätzlich) mit @Before eine Variable initial bestücken. Ist eine Methode mit @Before gekennzeichnet, wird sie vor jedem Test ausgeführt.
Hilft dir das weiter?
 

fiber

Bekanntes Mitglied
Ja ok, das kann ich tun. Aber mir geht es eigentlich um die Methoden Implementierung. ich poste lieber meine Klassen :) zB die Methode NrOfAppointments().. dafür muss ich doch eine Liste erstellen(?), muss ja auf die Items bzw. appointments in der Node zugreifen können und damit ich die Anzahl der appointments erhalte, muss ich doch eine for-eacb-schleife erstellen? aber ich weiss nicht , wie ich da vorgehen soll..
hoffe, dass ich mein Problem darstellen konnte.

Java:
package appointmentplanner;
import java.util.Iterator;

public class Day {
   
    private final int nr;
    Node headlist = null;
    private int day;
   
   
    public final static Time dayStart = new Time(8, 30);
    public final static Time dayEnd = new Time(17, 30);
    public final static Time lunchTime = new Time(12, 30);
    public final static TimeSpan dayPart = new TimeSpan(4, 0);
    public final static Appointment linchBreak = new Appointment("lunch Break", new TimeSpan(1, 0));
   
   
    public Day(int nr){
        this.nr = nr;  
    }
   
    public String getNameOfTheDay(){
       switch(day){
           case 1:
               System.out.println("Monday");
               break;
           case 2:
               System.out.println("Tuesday");
               break;
           case 3:
               System.out.println("Wednesday");
               break;
           case 4:
               System.out.println("Thursday");
               break;
           case 5:
               System.out.println("Friday");
               break;
           case 6:
               System.out.println("Suturday");
               break;
           case 7:
               System.out.println("Sunday");
           default:
               System.out.println("Error: only Intergers between 1 and 7 are accepted");
       } 
        return "Day: " + day;
    }
   
    public int getNrOfAppointments(){
        return 0;
    }
   
    public boolean canAddAppointment(TimeSpan duration){
        Node headlistCopy = headlist;
       
        for (int i = 0; i < getNrOfAppointments(); i++) {
            Appointment ap = headlistCopy.item;
            // TODO...
           
            if(duration.equals(ap.getDuration())){
                System.out.println("schon verplant");
               
            }else{
                return true;
            }
           
            headlistCopy = headlistCopy.next;
        }
        return false;
    }
   
    public void setStartTimeForAppointment(Appointment appointment){
    }
   
    public void addAppointmentWithStartTimeSet(Appointment appointment){
       
    }
   
    public void removeAppointment(String description){
   
    }
   
    public Time[] getAvailableStartTimesForAppointmentsOfDuration ( TimeSpan duration ){
        return null;
    }
   
     private static class Node<E> implements Iterator {
         
         private Node<E> next;
         private Appointment item;
         Node(Appointment item, Node<E> next){
             this.next = next;
             this.item = item;
         }
         
         public Appointment getValue(){
             return item;
         }
         
         public Node<E> getNext(){
             return next;
         }
         
         public void setValue(Appointment item){
             this.item = item;
         }
         
         public void setNext(Node<E> next){
             this.next = next;
         }
         
         public boolean isEmpty(){
             return item == null;
         }
         
         public void empty(){
             item = null;
         }
         
         @Override
         public String toString(){
             return item + "";
         } 

        @Override
        public boolean hasNext() {  
            return true;
        }

        @Override
        public Object next() {
             return next;
        }
    }
}



Java:
package appointmentplanner;

public class Appointment {
   
    private String description;
    private TimeSpan duration;
    private Time start;
    private Time end;

    public Appointment(String description, TimeSpan duration) {
        this.description = description;
        this.duration = duration;
    }
   
    public Time getStart(){  
        return start;
    }


    public void setStart(Time start){
        this.start = start;
    }
   
    public Time getEnd(){
        return null;
    }
   
    public void setEnd(Time end){
        this.end = end;
    }
   

    public TimeSpan getDuration() {
        TimeSpan  ts = new TimeSpan(start, end);
        ts = this.duration;
        return ts;
    }
   
    public String getDescription(){
      return "Start: " + getStart() + ", End: " + getEnd() + ", Appointment: " + description;
    }  
}
 

Joose

Top Contributor
Aber mir geht es eigentlich um die Methoden Implementierung. ich poste lieber meine Klassen :) zB die Methode NrOfAppointments().. dafür muss ich doch eine Liste erstellen(?), muss ja auf die Items bzw. appointments in der Node zugreifen können und damit ich die Anzahl der appointments erhalte, muss ich doch eine for-eacb-schleife erstellen? aber ich weiss nicht , wie ich da vorgehen soll..
hoffe, dass ich mein Problem darstellen konnte.

Ich sehe leider keine Methdoe "NrOfAppointments()" nur einen getter der so ähnlich heißt (und da wird nur 0 zurück geliefert).
Du musst deine Klassen soweit fertig implementieren, alle Objekte welche du von "außen" übergeben musst kannst du im JUnit dann als MockingObject übergeben.

Wenn deine Klasse Day mehrere Appointments verwalten können soll, dann musst du das entsprechend implementieren. Ich sehe hier nicht wirklich das Problem :/
Wie würdest du denn deine Klasse schreiben wenn du eine main-Methode erstellen dürfest? Worin besteht dann der Unterschied zu "ohne main-Methode"?
 

fiber

Bekanntes Mitglied
ok, ich versuche ja meine Methoden soweit wie möglich zu implementieren, aber da hakt es schon.. ich bräuchte Hilfe bei der Ansatz.
Die getNrOfAppointments() soll folgendes machen:

/∗∗
∗ Returns the number of appointments on this day,
∗ including the lunch break which is always present.
∗/
int getNrOfAppointments () { }
 

Joose

Top Contributor
Naja so wie ich das sehe hast du eine NodeList (headlist) mit den Appointments oder? Worin liegt das Problem diese NodeListe durchzugehen?
 

fiber

Bekanntes Mitglied
mit einer while-Schleife?

Java:
    public int getNrOfAppointments(){
        while( headlist != null){
            System.out.println(headlist.getValue());
            headlist = headlist.getNext();
        }
        return 0;
       
    }
 

fiber

Bekanntes Mitglied
ja, habe eine main-Methode erstellt, output: 0.. ( das ist ja auch für meine Methode nicht mehr relevant, sollte ja die Anzahl ausgeben nicht die Values)
wenn ich eine ArrayListe hätte, könnte ich mit einer for-each-loop durch die liste iterieren und mit return size() die Anzahl der Einträge ausgeben. Aber bei der Node ist es etwas komplizierter (für mich)..

Bin ich denn mit der while-Schleife auf dem richtigen Weg?
Oder wäre eine for-Schleife besser? weil eine for-each-Schleife könnte ich hier ja nicht benutzen.
Ich könnte doch die Anzahl der Elemente mit indexOf( Object o ) ausgeben??
 

fiber

Bekanntes Mitglied
ok..also hab nach langem denken eine mögliche Lösung gefunden und hoffe, dass das auch richtig ist..

also ich habe mir überlegt mit while-schleife durch die List zu iterieren..
Wenn die headliste nicht null ist soll er jedesmal auf den nächsten referenzieren und immer eins hochzählen..meine Implementierung dazu sieht folgendermaßen aus..

Java:
 int size = 0;
while(headlist != null){
headlist = headlist.next;
size ++;
}
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben