Endless Storm
Commander
- Registriert
- Dez. 2008
- Beiträge
- 2.158
Hallo,
ich habe ein Problem, und zwar bin ich über static und non-static noch nicht so ganz im klaren
Wir sollten einen Terminplaner basteln, das funktioniert auch ganz gut. Aber der Prof hat folgendes dazu geschrieben:
Die Methoden habe ich bereits auf public gesetzt, aber welche Attribute müssen auf private gesetzt werden? Und mit dem rest werde ich auch nicht so recht schlau. In der Main wird doch bereits ein Objekt vom Typ Termin erzeugt und in die ArrayList gesetzt. Damit das funktioniert, musste ich allerdings vom TerminplanerUI ein Objekt erzeugen... das war ein Tip eines befreundeten Informatikers... Verstehen tue ich diesen Schritt nicht, sowas machen wir auch in keinem der Beispiele bisher.
Vielleicht könnt ihr mir weiterhelfen, was nicht optimal programmiert ist und wie ich das mit dem Objekterstellen vom TerminplanerUI umgehen könnte. Lasse ich das erzeugen vom Objekt TerminplanerUI weg, erhalte ich static-probleme...
Zum Programm:
Wir sollen uns selbst als Termin voreinstellen, dann weitere über die Konsole eingeben können, welche er in der korrekten Reihenfolge abspeichert, dann sollen wir alles ausgeben (in der richtigen Reihenfolge).
Hinweis: Das Paket Console enthält u.a. den Scanner für die Konsoleneingaben
Hier mal die Klassen:
ich habe ein Problem, und zwar bin ich über static und non-static noch nicht so ganz im klaren
Wir sollten einen Terminplaner basteln, das funktioniert auch ganz gut. Aber der Prof hat folgendes dazu geschrieben:
Bitte alle Attribute private und Zugriffsmethoden public. Auch in der UI-Klasse. Erzeugen Sie dann in main eine Instanz dieser Klasse, anstatt dieses instanzlose Programm. Das ist keine optimale Lösung, da kann nie jemand die Klasse weiterverwenden, integrieren, usw. Das entspricht nicht oo-Programmierweise.
Die Methoden habe ich bereits auf public gesetzt, aber welche Attribute müssen auf private gesetzt werden? Und mit dem rest werde ich auch nicht so recht schlau. In der Main wird doch bereits ein Objekt vom Typ Termin erzeugt und in die ArrayList gesetzt. Damit das funktioniert, musste ich allerdings vom TerminplanerUI ein Objekt erzeugen... das war ein Tip eines befreundeten Informatikers... Verstehen tue ich diesen Schritt nicht, sowas machen wir auch in keinem der Beispiele bisher.
Vielleicht könnt ihr mir weiterhelfen, was nicht optimal programmiert ist und wie ich das mit dem Objekterstellen vom TerminplanerUI umgehen könnte. Lasse ich das erzeugen vom Objekt TerminplanerUI weg, erhalte ich static-probleme...
Zum Programm:
Wir sollen uns selbst als Termin voreinstellen, dann weitere über die Konsole eingeben können, welche er in der korrekten Reihenfolge abspeichert, dann sollen wir alles ausgeben (in der richtigen Reihenfolge).
Hinweis: Das Paket Console enthält u.a. den Scanner für die Konsoleneingaben
Hier mal die Klassen:
Code:
import inout.Console;
import java.util.ArrayList;
public class TerminplanerUI
{
private ArrayList neueListe = new ArrayList();
//main
public static void main (String args[])
{
TerminplanerUI starte = new TerminplanerUI();
starte.neueListe.add(new Termin("Geburtstag: ***", 2013, 9, 15));
starte.hauptmenue();
}
//Auswahlmenü
public void hauptmenue()
{
char auswahl;
druckeLinie();
System.out.println("Bitte wählen Sie zwischen folgenden Funktionen:\n\n" +
"Neuer Termin: 1\nTermine anzeigen: 2\nAnwendung beenden: 3");
druckeLinie();
auswahl = Console.readChar();
switch (auswahl)
{
case '1':
anlegenTermin(); break;
case '2':
anzeigenTermin(); break;
case '3':
druckeLinie();
System.out.println("Die Anwendung wurde beendet.");
druckeLinie();
break;
default:
{
System.out.println("Keine gültige Eingabe.");
hauptmenue();
}
}
}
//häufig verwendete Linie als Methode
public void druckeLinie()
{
System.out.println("-----------------------------------------------");
}
//anlegen von Terminen, sortieren nach Datum, abspeichern in ArrayList
public void anlegenTermin()
{
int eingabeJahr, eingabeMonat, eingabeTag, i = -1, index = 0;
String eingabeTitel;
System.out.println("Bitte geben Sie den Termin ein:\nJahr:");
eingabeJahr = Console.readInt();
while (true)
{
System.out.println("Monat:");
eingabeMonat = Console.readInt();
if (eingabeMonat >0 & eingabeMonat <13)
{
break;
}
System.out.println("Bitte nur Monate von 1 - 12 verwenden.");
}
while (true)
{
System.out.println("Tag:");
eingabeTag = Console.readInt();
if (eingabeTag >0 & eingabeTag <32)
{
break;
}
System.out.println("Bitte nur Tage von 1 - 31 verwenden.");
}
System.out.println("Terminbeschreibung:");
eingabeTitel = Console.readString();
for (Object temp: neueListe)
{
Termin termin = (Termin)temp;
i++;
if (termin.getJahr() < eingabeJahr)
{
index = i+1;
continue;
}
else if (termin.getJahr() > eingabeJahr)
{
index = i;
break;
}
else if (termin.getMonat() < eingabeMonat)
{
index = i+1;
continue;
}
else if (termin.getMonat() > eingabeMonat)
{
index = i;
break;
}
else if (termin.getTag() > eingabeTag)
{
index = i;
break;
}
else
index = -1;
}
if (index == -1 || index > neueListe.size())
neueListe.add(new Termin(eingabeTitel, eingabeJahr, eingabeMonat, eingabeTag));
else
neueListe.add
(index, new Termin(eingabeTitel, eingabeJahr, eingabeMonat, eingabeTag));
hauptmenue();
}
//anzeigen der gespeicherten Termine
public void anzeigenTermin()
{
int anzahl = 1;
for (Object temp: neueListe)
{
Termin termin = (Termin)temp;
System.out.println("Termin: Nr. " + anzahl +
"\nDatum: " + termin.getTag() + "." + termin.getMonat() + "." +
termin.getJahr() +
"\nBeschreibung:\n" + termin.getTitel() + "\n");
anzahl++;
}
hauptmenue();
}
}
Code:
public class Termin
{
private String titel;
private int jahr, monat, tag;
//Termin anlegen mit Parametern
Termin(String titel, int jahr, int monat, int tag)
{
this.titel = titel;
this.jahr = jahr;
this.monat = monat;
this.tag = tag;
}
//Lesende Operationen
String getTitel()
{
return titel;
}
int getJahr()
{
return jahr;
}
int getMonat()
{
return monat;
}
int getTag()
{
return tag;
}
}
Zuletzt bearbeitet: