Kalendermanager

Leno

Bekanntes Mitglied
Hi liebes Forum ,

ich habe mal wieder ein Problem :noe: besser gesagt Ich habe hier eine Aufgabe und habe Sie auch gelöst bekommen habe leider aber gar keine Musterlösung. Vielleicht kann ja jemand drüber schauen und sagen ob Ich die Objektorientierte Programmierung so verstanden habe.......

Hier die Aufgabe :

Sie sollen einen Kalendermanager für Nichtschaltjahre in Java modellieren. Modellieren Sie dazu Kalenderjahre und Tage durch jeweils entsprechende Klassen.
Ein Jahr ist gekennzeichnet durch eine Jahreszahl (z. B. 2010) und besitzt immer 365 Tage, die vom 1 bis 365 durchnummeriert sind.
Man kann (nur) über ein Jahr-Objekt einen neuen Termin zu einem bestimmten Tag eintragen, indem man die Tageszahl als Zahl und die Beschreibung des Termins als String angibt. Bespiel für einen Aufruf dazu wäre etwa jahr.eintragen(53, „Klausur“), wenn jahr eine Instanz eines Jahres ist. Bei unserem einfachen Kalender ist maximal ein Termin pro Tag zulässig.
Man kann über ein Jahr-Objekt weiterhin zum i-ten Tag eines Jahres abfragen, ob dieser Tag durch einen Termin belegt ist, das Resultat ist vom Typ boolean. Um einen Überblick über die terminliche Auslastung zu erhalten, ist es weiterhin möglich abzufragen, wie viele Tage für ein Kalenderjahr durch Termine insgesamt belegt sind. Halten Sie dazu die Anzahl der belegten Termine für ein Jahr in einer Instanzvariablen nach, um nicht jedesmal alle Tage auf Belegung testen zu müssen.
Erzeugen Sie zwei Kalenderobjekte für das Jahr 2010 und 2011. Tragen Sie am 29. Tag des Jahres 2010 als Termin „Klausur“ ein und am 37. Tag des Jahres 2011 als Termin „Treffen“. Fragen Sie anschließend ab, ob am 28. Tag des Jahres 2010 ein Termin vorliegt und geben das Ergebnis auf dem Bildschirm aus. Anschließend geben Sie die Gesamtzahl aller belegten Termine für die beiden Jahre (also die Summe zu den beiden Jahren) auf dem Bildschirm aus.


Meine Klasse Kalenderjahr
Hier meine Lösung :

Java:
public class Kalenderjahr {

	public int anzahl = 0;
	public int jahresanzahl;
	// Nachfragen Felder sehr wichtig // Tage tag;
	String[] tage;
	Tage tag;

	public Kalenderjahr(int jahr) {

		this.jahresanzahl = jahr;

		
				
	  //  tag = new Tage(); // HIER KOMME ICH NICHT WEITER WIE KANN ICH EINEN ARRAY 
	                                  // Objekt Instanzieren und hier ansprechen also den Index 

		tage = new String[366];
		for (int i = 0; i < tage.length; i++) {

			tage[i] = "";

		}

		// tag = new Tage(); // Anlegen eines neuen Objektes und erzeugen und
		// aufrufen.

	}

	public void terminEintragen(int termin, String s) {

		tage[termin] = s;
		anzahl++;
        
		
		
	}

	public boolean abfrageTermin(int t) {

		String angfrage = tage[t];

		if (angfrage.length() > 0) {

			System.out.println("Am" + t + "Tag ist bereits ein Termin");

			return true;
		} else
			System.out.println("Am" + t + "Tag ist kein Termin");

		return false;

	}

	public String getInhalt(int tag) {

		String s;
		s = tage[tag];

		return s;
	}

}


Meine Klasse Tage

Java:
public class Tage {

	String [] tage;
	
	public Tage() {

		tage = new String[366];

		for (int i = 0; i < tage.length; i++) {

			tage[i] = "";

		}
	}

}

Meine Testklasse

Java:
public class TestKlasse {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Kalenderjahr j1 = new Kalenderjahr(2010);

		j1.terminEintragen(50, "Hallo");

		j1.abfrageTermin(50);

		j1.terminEintragen(51, "");

		j1.abfrageTermin(51);

		Kalenderjahr j2 = new Kalenderjahr(2012);

		j2.terminEintragen(50, "Hall2");
		j2.abfrageTermin(50);

		System.out.println(j2.getInhalt(50));

	}

}


Und hier mal meine wichtigste Frage wie kann Ich ein Objekt tage instanzieren und in der Klasse Kalenderkjahr nutzen und die Array Felder anspreche ????
 
Zuletzt bearbeitet von einem Moderator:

Leno

Bekanntes Mitglied
@ timbeau


Tage tag = new Tage(); // Das bedeutet doch das der Konstruktor der Klasse Tage aufgerufen wird richtig ?? und dann ein
Array aufgebaut wird oder instanziert wird


tage [] tageArray = new tage[int]; // das Verstehe Ich nicht so ganz ?? Ich möchte gerne einen Termin im Objekt 2010 am 2 Tag eintragen Ich würde aber gerne den Array ansprechen über den Index 2 mache Ich das nicht so feld[2] = "Hallo" ; das geht aber irgendwie nicht der Compiler meckert dann.
 

Leno

Bekanntes Mitglied
Sagen wir mal so wie wäre es den Objektoerientiert richtig Ich habe leider keinen der mir das erklären kann mache Ich das falsch mit den Beiden Klassen wo liegt mein Denkfehler ??
 

timbeau

Gesperrter Benutzer
Gehen wir nochmal objektorientiert vor.

Du hast das Objekt Jahr, das beinhaltet u.a. 365 Tage. Das Array aus der Klasse Tage gehört ins Jahr. Denn nicht ein Tag besteht aus mehreren Tagen.

Weiter sollten alle Variablen private sein und nur per getter & setter erreichbar sein.

Ein Tag beinhaltet 1 Termin, in deinem Fall einen String. <- Klasse Tag(e) // Tag ist besser

In das Array in der Klasse Jahr müssen jetzt 365 Tage reingepackt werden. Jeden Tag kannst du dann über array[int] ansprechen. Da aber in dem Array keine Strings sondern Tage stehen funktioniert array[2] = "BLA" natürlich nicht. Um dem Tag in array[2] einen Termin hinzufügen nutzt du dann die setter Methoden. Bis hierhin bitte mal basteln.
 

Leno

Bekanntes Mitglied
Hi damit Ich dich richtig verstehe meinst du das soo???

Java:
public class Kalenderjahr {

	private int anzahl = 0;
	private int jahresanzahl;
	private Tage[] tage = new Tage[365]; // Vom Daten Typ Tage wird ein Feld
											// angelegt!

	public Kalenderjahr(int jahr) {

		this.jahresanzahl = jahr;

		for (int i = 0; i < tage.length; i++) {

			tage[i] = new Tage(); // Ein Objekt vom Typen Tage wird in Array
									// reingelegt.

		}

	}

	public void setTermin(int termin, String s) { // Setze Termin.

		tage[termin].Termineintragen("Hallo", 20);
		anzahl++;

	}

Die Klasse Tage

Java:
public class Tage {

	// Objekt Tage erschaffen.
	
	public String beschreibung ;
	
	
	public Tage() {

		
		}
	


	
	public void Termineintragen ( String beschreibung , int termin ){
		
		beschreibung = beschreibung;
		
	}







}


Ich tue mich echt schwer damit mit Array und OOP anstatz ? war die erste Lösung die Ich hatte den so falsche ??
 

timbeau

Gesperrter Benutzer
Diese ist schon besser.

Jetzt müsstest du eigentlich innerhalb der Klasse Termin noch eine Referenz auf das Jahr angeben oder halt als String speichern. Bisher machst du mit dem "int" im Termin-Konstruktor noch nichts.
 

Leno

Bekanntes Mitglied
Sorry das Ich dich damit nerve aber Ich verstehe das mit der Referenz noch nicht so wie müsste das den als Quell Code aussehen diese Referenz ??
 

timbeau

Gesperrter Benutzer
Naja wenn du jetzt alle Termine haben willst die auf das Jahr 2010 fallen kannst du durch das Jahr 2010 gehen aber nicht durch alle Termine. Also Referenz ist sowas wie du in der Klasse Jahr gemacht hast

class Termin {
Jahr jahr;
...

}

im Konstruktor dann jahr = new Jahr(int);

Sowas in der Art
 

Neue Themen


Oben