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:
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
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:
Insbesondere bezweifel ich meinen Konstruktor-Salat in der Klasse Appointment. Da muss doch ne Menge faul sein
Danke im Voraus an alle Helfer!
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
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
Danke im Voraus an alle Helfer!