Terminkalender Aufgabe

c0rnfl4k3s

Mitglied
Hi zusammen,
Zunächst einmal bitte ich darum, mir nicht direkt fertige Lösungen zu geben, sondern mir die Dinge die ich nicht verstehe erstmal theoretisch zu erklären, bzw mir Hinweise zum selber lösen zu geben. Ich möchte nicht einfach nur die Aufgabe abgeben, sondern einen Lerneffekt haben.
Ich soll für die Uni eine Aufgabe lösen, in der ich ein Programm zur Terminerzeugung in einem simplen Kalender schreiben soll. Der Kalender selbst war eine vorherige Aufgabe und dient als Grundlage für die aktuelle. Der Kalenderklasse werden einfach ein Monat und ein Jahr als Parameter übergeben, und der Monat wird dann in Tabellenform auf der Konsole ausgegeben. Das funktioniert bei mir soweit einwandfrei. Hier der Code:
Java:
public class DateUtil {

    public static final String[] MONTH = { "Januar", "Februar", "Maerz", "April", "Mai", "Juni", "Juli", "August",
            "September", "Oktober", "November", "Dezember" };
    public static final String[] DAY = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" };

    public static boolean isLeapYear(short year) {
        return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? true : false;
        // durch 4 teilbar und kein volles Jahrhundert, oder ein
        // "Ausnahme-Jahrhundert"
    }

    public static byte daysOfMonth(byte month, short year) {
        assert month < 12 && month >= 0;
        switch (month) {
        case 3:
        case 5:
        case 8:
        case 10:
            return 30;
        case 1:
            return (byte) (isLeapYear(year) ? 29 : 28);
        default:
            return 31;
        } // keine breaks notwendig, da Methode bei return verlassen wird
    }

    public static byte firstDayOfYear(short year) {
        return (byte) ((5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7);
    }

    public static byte firstDayOfMonth(byte month, short year) {
        assert month < 12;
        byte tmp = firstDayOfYear(year);

        for (byte i = 0; i < month; i++) {
            tmp = (byte) ((tmp + daysOfMonth(i, year)) % 7);
        }

        return tmp;
    }

    public static void printMonth(byte month, short year) {
        System.out.println(MONTH[month] + " " + year);
        for (int i = 0; i < DAY.length; i++) {
            System.out.print(DAY[i] + " ");
        }
        System.out.println();
        // Alternativ: System.out.println("Mo Di Mi Do Fr Sa So");

        for (int i = 0; i < firstDayOfMonth(month, year); i++) // am richtigen
                                                                // Wochentag
                                                                // anfangen
            System.out.print("   ");
        for (int i = 1; i <= daysOfMonth(month, year); i++) {
            if (i < 10) // zusätzliches Leerzeichen vor die einzelnen Ziffern
                System.out.print(" ");
            System.out.print(i + " ");
            if ((i + firstDayOfMonth(month, year)) % 7 == 0) // Zeilenumbruch
                                                                // nach jedem
                                                                // Sonntag
                System.out.println();
        }
    }
}

Das Problem bei der neuen Aufgabe ist, dass sie aus vielen Teilaufgaben besteht, und viele davon komplett neu für mich sind. Ich kriege da einfach keinen Überblick, wie ich es schreiben soll. Außerdem finde ich sie an manchen Stellen unklar formuliert. Die Aufgabe ist als PDF angehängt.

Meine bisherigen Probleme:
1) ich weiß nicht, wie ich die Unterscheidung zwischen ganztägigen Terminen und zeitlich begrenzten Terminen implementieren soll. Einfach bei ganztägig die zeit auf 00.00-23.59 zu setzen ist falsch, denn der termin soll ohne zeitangabe als ganztägig markiert sein. Ich hab erst überlegt, einfach zwei verschiedene KOnstruktoren dafür zu verwenden, aber dann weiß ich nicht wie ich das mit den exceptions machen soll.
2) Ich verstehe nicht, was mit der checkDate methode gemacht werden soll, denn die gültigkeit der eingabe soll ja schon mit exceptions überprüft werden, und das wäre ja redundant.
3) Ich habe generell keine Ahnung wie ich den ganzen exceptions-kram machen soll da ich sie noch nie benutzt habe :D
4) mir fällt keine reihenfolge bzw. kein grober ablaufplan ein, was ich nacheinander machen soll. macht die vorgegebene reihenfolge der Teilaufgaben wirklich sinn?

Hier mein bisheriges Rumgecode:
Java:
// zusätzliche Methode in der Klasse DateUtils:
public static boolean checkDate(byte day, byte month, short year) {
        if (year >= 0 && month >= 0 && month < 12 && day >= 0 && day < daysOfMonth(month, year))
            return true;
        return false;
    }

// Klasse Appointment:


public class Appointment {

    public String subject = "";
    public byte day;
    public byte month;
    public short year;
    public boolean allday;
    public short start;
    public short length;

    public Appointment(String subject, byte day, byte month, short year, boolean allday,
            short start, short length) {
        this.subject = subject;
        this.day = day;
        this.month = month;
        this.year = year;
        if (!allday) {
            this.start = start;
            this.length = length;
        } else
            this.allday = true;
    }

    public Appointment(Appointment ap) {
        if (ap != null) {
            this.subject = ap.subject;
            this.month = ap.month;
            this.year = ap.year;
            this.allday = ap.allday;
            this.start = ap.start;
            this.length = ap.length;
        }
    }
}


// Exception Klassen:

import java.lang.Exception;

public class IllegalStateException extends Exception {

    public IllegalStateException(){
        super();
    }
    public IllegalStateException(String message){
        super(message);
    }
}


public class IllegalArgumentException extends Exception {

    public IllegalArgumentException(){
        super();
    }
    public IllegalArgumentException(String message){
        super(message);
    }
}

Insbesondere bezweifel ich meinen Konstruktor-Salat in der Klasse Appointment. Da muss doch ne Menge faul sein :D

Danke im Voraus an alle Helfer! :)
 

Anhänge

  • Aufgabe.pdf
    359,5 KB · Aufrufe: 9

JStein52

Top Contributor
1) ich weiß nicht, wie ich die Unterscheidung zwischen ganztägigen Terminen und zeitlich begrenzten Terminen implementieren soll.
Dafür gibt es doch eine boolean-Variable in der das steht !
2) Ich verstehe nicht, was mit der checkDate methode gemacht werden soll
Die sollst du natürlich im Konstruktor aufrufen um so die Gültigkeit des Datums zu prüfen.
3) Ich habe generell keine Ahnung wie ich den ganzen exceptions-kram machen soll da ich sie noch nie benutzt habe
Das musst du dir dann mal angucken, hilft ja alles nix. (z.B. Java ist auch eine Insel)
4) mir fällt keine reihenfolge bzw. kein grober ablaufplan ein, was ich nacheinander machen soll
Einfach an das AufgabenBlatt halten, ja ist sinnvoll.
 

Meniskusschaden

Top Contributor
Ich glaube, du beachtest den folgenden Satz aus der Aufgabenstellung noch zu wenig. Deine Attribute sind bisher gar nicht gekapselt.
Denken Sie daran, die Attribute sinnvoll zu kapseln, und implementieren Sie Me-
thoden mit Validitätstest, die die Einhaltung der obigen Randbedingungen garan-
tieren sollen.
 

c0rnfl4k3s

Mitglied
Hi, Danke zunächst für die Hinweise.
Was genau ist mit der Kapselung der Attribute gemeint? Verstehe die Formulierung nicht.
Hier inzwischen mein neuer Code:
Java:
public class Appointment {

    private String subject = "";
    private byte day;
    private byte month;
    private short year;
    private boolean allday;
    private short start;
    private short length;

    public Appointment(String subject, byte day, byte month, short year, boolean allday, short start, short length)
            throws IllegalStateException, IllegalArgumentException {

        if (year < 1900 || year > 2099 || !DateUtil.checkDate(day, month, year)) {
            throw new IllegalArgumentException("Ungültiges Datum.");
        }
        if (start + length > 1440) {
            throw new IllegalArgumentException("Termin überschreitet Mitternacht.");
        }
        if (allday && (start != 0 || length != 0)) {
            throw new IllegalStateException("Ganztägige Termine haben keinen Zeitraum.");
        }
        if (!allday && length <= 0) {
            throw new IllegalStateException("Ein nicht-ganztägiger Termin muss einen Zeitraum haben.");
        }

        this.subject = subject;
        this.day = day;
        this.month = month;
        this.year = year;
        this.allday = allday;
        this.start = start;
        this.length = length;
    }

    public Appointment(Appointment ap) {
        if (ap != null) {
            this.subject = ap.subject;
            this.month = ap.month;
            this.year = ap.year;
            this.allday = ap.allday;
            this.start = ap.start;
            this.length = ap.length;
        }
    }

    public String toString() {

        return subject + ": " + day + 1 + "." + month + 1 + "." + year
                + (!allday
                        ? (", von " + start / 60 + ":" + ((start % 60 < 10) ? ("0") : ("")) + start % 60 + " bis "
                                + (length / 60 + start/60) + ":" + ((length % 60 < 10) ? ("0") : ("")) + length % 60)
                        : (", ganztägig."));
    }
}


public class AppointmentTest {

    public static void main(String[] args) {
       
        try {
        Appointment a = new Appointment("Sport", (byte)00, (byte)00, (short)1990, false, (short)600, (short)630);
        System.out.println(a.toString());
        } catch(IllegalStateException e) {
            e.printStackTrace();
        } catch(IllegalArgumentException e){
            e.printStackTrace();
        }
    }
}

Das klappt soweit schonmal ganz gut, Ich habe jetzt ein klareres Bild von der Aufgabe. Ich bin mir aber immer noch nicht sicher ob ich wirklich den Kern der Aufgabenstellung getroffen habe.
Kann mich jemand verbessern?
 

Meniskusschaden

Top Contributor
Warum baust du die Gültigkeitsprüfung für das Jahr nicht einfach auch mit in die checkDate()-Methode ein?
Ich hab erst überlegt, einfach zwei verschiedene KOnstruktoren dafür zu verwenden
Würde ich auch so machen. Finde ich viel besser.
Was genau ist mit der Kapselung der Attribute gemeint?
Man sollte nicht direkt auf die Attribute zugreifen können. Sonst hast du als Programmierer der Klasse ja keine Kontrolle darüber, ob alle Bedingungen eingehalten werden.
 

JStein52

Top Contributor
Ich denke du musst dir für deine Klasse Appointment noch ein paar zusätzliche Methoden überlegen die aus den restlichen Beschreibungen zur Aufgabe implizit hervorgehen (getter/setter)
 

c0rnfl4k3s

Mitglied
Hi zusammen,
Ich hab wieder weiter gearbeitet und eure Vorschläge entgegen genommen. Ich habe die checkDate-methode überarbeitet und die getter/setter in Appointment erzeugt.
Ich bin jetzt bei aufgabe 5 und bin ganz schön verwirrt, weil ich seit einer Stunde einen total simplen syntaxfehler nicht gelöst kriege.

Java:
public class Appointments {
  
    public Link<Appointment>[][] buckets;
  
    buckets = new Link[200][366];
  
  
}

Wieso klappt das denn nicht !? :D
Da steht nur, Syntaxerror on Token ';', ',' expected.

und selbst mit typecast:
Java:
public class Appointments {
   
   public Link<Appointment>[][] buckets;
   
   buckets = (Link<Appointment>[][]) new Link[200][366];
   
   
}
Gleicher Fehler. :confused:
 

Robat

Top Contributor
Was du machen kannst ist:
Java:
public Link<Appointment>[][] buckets = new Link<>[200][366];

oder

die Initialisierung in den Konstruktor packen:
Java:
public Link<Appointment>[][] buckets;
public Appointments() {
      buckets = new Link<>[200][366];
}

Das was du vorhast, geht nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Problem mit Terminkalender plss Hilfe;) Java Basics - Anfänger-Themen 6
Z Terminkalender mittels Klassen und Feldern Java Basics - Anfänger-Themen 2
J Buchstabenzähler-Aufgabe mit Arrays Java Basics - Anfänger-Themen 5
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
G matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
StevenGG Aufgabe im Studium Java Basics - Anfänger-Themen 36
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
T Aufgabe zum Verschlüsselungsalgorithmus Java Basics - Anfänger-Themen 11
J Erste Schritte Aufgabe Java Basics - Anfänger-Themen 24
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
A Aufgabe: Gleitkommazahlen Java Basics - Anfänger-Themen 3
A Java-Programmierungs Aufgabe Java Basics - Anfänger-Themen 2
U Aufgabe zu Kontrollstrukturen Java Basics - Anfänger-Themen 8
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
J Aufgabe als Feuertaufe Java Basics - Anfänger-Themen 8
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
H aufgabe 4 Java Basics - Anfänger-Themen 297
M Hilfe bei Projektorientierungs-Aufgabe !! Java Basics - Anfänger-Themen 3
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
H java aufgabe Java Basics - Anfänger-Themen 7
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
H was verlangt die aufgabe ? Java Basics - Anfänger-Themen 10
H java aufgabe Java Basics - Anfänger-Themen 68
H java aufgabe Java Basics - Anfänger-Themen 25
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
R Java Aufgabe (Teilbarkeit) Java Basics - Anfänger-Themen 7
H java aufgabe Java Basics - Anfänger-Themen 44
H java aufgabe Java Basics - Anfänger-Themen 7
H java string aufgabe Java Basics - Anfänger-Themen 10
H array aufgabe Java Basics - Anfänger-Themen 13
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
H aufgabe Java Basics - Anfänger-Themen 9
H lösung aufgabe Java Basics - Anfänger-Themen 12
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
H java online aufgabe Java Basics - Anfänger-Themen 4
H Array aufgabe Java Basics - Anfänger-Themen 7
H oop aufgabe probe kalusur Java Basics - Anfänger-Themen 11
H oop aufgabe Java Basics - Anfänger-Themen 19
H JAVA AUFGABE Java Basics - Anfänger-Themen 7
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben