Terminplaner implementieren

Kira_newbie

Aktives Mitglied
Huhu liebes java-forum. Ich bin ganz neu hier, und hoffe, dass ihr mir hin und wieder ein paar Hilfestellungen geben könnt :)

Ich soll einen Terminplaner implementieren, bin aber derzeit noch ziemlich Planlos, wie ich an die Sache rangehen soll.... es sind einfach zu viele Anforderunegn auf einmal...
Es fängt schon damit an, dass es 2 möglichkeiten geben soll einen neuen Termin zu erzeugen...

Erstellen Sie eine Klasse Termin. Sie soll ein Datum als Tag, Monat und Jahr
und eine Notiz speichern. Es soll zwei Möglichkeiten geben, einen neuen Termin zu erzeugen: Das Datum muss immer angegeben werden; der Notiz-Parameter ist optional.
Fügen Sie der Klasse eine toString()-Methode hinzu, die Datum und Notiz in geeigneter Form als String zurück gibt. Eine weitere Methode soll einen zweiten Termin als Parameter erhalten und als booleanWert zurück geben, ob das Datum des Termins mit dem Datum des übergebenen übereinstimmt.

Implementieren Sie die Klasse Terminplaner. Sie soll Termine als ArrayList<Termin>,
also eine Liste von Terminen, speichern. Verwenden Sie die Java-API-Dokumentation,
um sich mit der Funktionalität der Klasse vertraut zu machen.
Ihre Klasse soll die folgenden Methoden unterstützen:
• Terminplaner(): Konstruktor für den Terminplaner, der die ArrayList initialisiert.
• void neuerTermin(Termin t): Fügt einen Termin hinzu.
• void zeigeTermine(Termin t): Zeigt all diejenigen Termine an, die das selbe Datum wie der übergebene Termin besitzen.
• void zeigeTermine(int ab, int anzahl): Zeigt die übergebene Anzahl von
Terminen ab der übergebenen Indexposition in der Liste an (es handelt sich hierbei nicht um ein Datum). Beachtet, dass innerhalb einer ArrayList das erste Element den Index 0 besitzt.
• void zeigeAlleTermine(): Zeigt alle Termine des Terminplaners an.

Wir haben ein Beispiel dazu gemacht, wie man eine ArrayList verwenden kann:
Java:
public class Karte
{
    int farbe, wert;
    static int spalten = -1;
    
    public Karte(int farbe, int wert)
    {
        this.farbe = farbe;
        this.wert = wert;
    }
}

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.*;
import java.util.concurrent.*;
import java.io.*;
import javax.imageio.*;


public class Spielbrett extends JFrame
{
	private static final long serialVersionUID = -2219224963313371208L;
	static final double scale = 0.47;
    static final int cardHeight = (int)(215*scale);
    static final int cardWidth = (int)(150*scale);
    static final int leftBorder = 50;
    static final int topBorder = 80;
    static final double gap = 1.3;

    private ArrayList<Karte> cards;
    private BufferedImage images[][];

    private String suits[] = {"spades", "clubs", "hearts", "diamonds"};
    private String values[] = {"seven", "eight", "nine", "ten", "jack", "queen", "king", "ace"};

    public Spielbrett()
    {
        super("Cards by Semicol");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(new Dimension(800, 700));
        setVisible(true);

        images = new BufferedImage[4][8];
        for (int i=0; i<suits.length; ++i)
            for (int j=0; j<values.length; ++j) {
                String fileName = "cards/" + suits[i] + "-";
                fileName += values[j] + ".png";

                try {
                    images[i][j] = ImageIO.read(new File(fileName));
                    //image = ImageIO.read(getClass().getResourceAsStream(fileName));
                } catch (IOException e) {
                    System.out.println("Error while loading image " + fileName);
                }
            }
    }

    public void maleKarten(ArrayList<Karte> cards)
    {
        this.cards = cards;
        repaint();
    }

    public void paint(Graphics g2)
    {
        if (cards == null)
            return;

        BufferedImage offscreen = new BufferedImage(getWidth(), getHeight(),
                                                    BufferedImage.TYPE_3BYTE_BGR);
        Graphics g = offscreen.getGraphics();
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect(0, 0, getWidth(), getHeight());

        for (int i=0; i<cards.size(); ++i) {
            Karte c = cards.get(i);
            drawCard(g, c, i);
        }

        g2.drawImage(offscreen, 0, 0, this);
    }

    private void drawCard(Graphics g, Karte card, int index)
    {
        int numCols = (int)((getWidth() - leftBorder) / (cardWidth*gap));
        if (numCols < 1)
            numCols = 1;
        if (Karte.spalten > 0)
            numCols = Karte.spalten;

        double y = topBorder + (index / numCols) * cardHeight * gap;
        double x = leftBorder + index % numCols * cardWidth * gap;
        g.drawImage(images[card.farbe][card.wert], (int)x, (int)y, cardWidth, cardHeight, null);
    }

    public void warte()
    {
        final CountDownLatch cdl = new CountDownLatch(3);
        KeyEventDispatcher disp = new KeyEventDispatcher()
            {
                public boolean dispatchKeyEvent(KeyEvent e) {
                    cdl.countDown();
                    return false;
                }
            };
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(disp);
        try { cdl.await(); } catch(InterruptedException e) {}
        KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(disp);
    }
}


import java.util.*;

public class Spielkarten 
{
	public static void main(String[] args)
	{
		Spielbrett sb = new Spielbrett();
		
		ArrayList<Karte> stapel = new ArrayList<Karte>();
		for (int farbe=0; farbe<4; farbe++)
			for (int wert=0; wert<8; wert++) {
				Karte k = new Karte(farbe, wert);
				stapel.add(k);
			}
		
		sb.maleKarten(stapel);
		sb.warte();
		
		ArrayList<Karte> gemischt = new ArrayList<Karte>();
		while (stapel.size() > 0) {
			int index = (int)(Math.random() * stapel.size());
			Karte k = stapel.remove(index);
			gemischt.add(k);
		}
		
		sb.maleKarten(gemischt);
	}
}
 
G

Gast2

Gast
Ich sehe nirgends ein ? in deinem Post. ;)
Bei konkreten Problemen helfen wir dir gerne weiter, Aufgaben lösen tuen wir nicht.
 

Kira_newbie

Aktives Mitglied
klar, das verlange ich auch überhaupt nicht von euch, tut mir leid.
also fangen wir mal an.
1. wie kann ich überahupt einen neuen Termin anlegen? - bzw. wie speichere ich ihn?
2. als 1. lege ich mal Tag, Datum, Monat, Jahr an.
das müsste dan ja aus unserem Beispiel der Schritt sein?
Java:
 import java.util.*;

public class Spielkarten 
{
	public static void main(String[] args)
	{
		Spielbrett sb = new Spielbrett();
		
		ArrayList<Karte> stapel = new ArrayList<Karte>();
		for (int farbe=0; farbe<4; farbe++)
			for (int wert=0; wert<8; wert++) {
				Karte k = new Karte(farbe, wert);
				stapel.add(k);
			}
		
		sb.maleKarten(stapel);
		sb.warte();
		
		ArrayList<Karte> gemischt = new ArrayList<Karte>();
		while (stapel.size() > 0) {
			int index = (int)(Math.random() * stapel.size());
			Karte k = stapel.remove(index);
			gemischt.add(k);
		}
		
		sb.maleKarten(gemischt);
	}
}[/Java] 
?

3. Später kann ich die einzelnen Tage dan irgendwie in meine ArrayList packen.? bin ich soweit richtig?
 
G

Gast2

Gast
1. wie kann ich überahupt einen neuen Termin anlegen?
Indem du z.b. ein neues Termin Objekt erzeugst und ihn dem Terminplaner übergibst.

bzw. wie speichere ich ihn?
Das bleibt dir überlassen, entweder in einer Datei (wär wohl anfangs das einfachste) oder in einer kleinen Datenbank, z.b. H2 Database Engine.

2. als 1. lege ich mal Tag, Datum, Monat, Jahr an.
das müsste dan ja aus unserem Beispiel der Schritt sein?
Keine Ahnung was du meinst, in dem Code steht ne Menge drin..

3. Später kann ich die einzelnen Tage dan irgendwie in meine ArrayList packen.?
Meinst du die Termine? Ja, die kannst du in eine ArrayList<Termin> legen.
 

Kira_newbie

Aktives Mitglied
okay. also so weit bin ich jetzt mal:
Java:
public class Termin
{
	int jahr, monat, tag;													//Attribute Jahr, Monat, Tag, Notiz
	String notiz;
	
	public Termin(int jahr, int monat, int tag, String notiz)				//Konstruktor
	{
			this.jahr = jahr;												//Initialisierung
			this.monat = monat;
			this.tag = tag;
			this.notiz = notiz;
	}
{
	}
	 public String toString(){												//toString Methode
	    	String description;
	    	description = "Jahr" + jahr + ", Monat" + monat + ",Tag" + tag;
	    	return description;
	 }
}

Java:
import java.util.*;
import java.util.GregorianCalendar;

public class Terminplaner 
{

				public static void main(String[] args){
					{
						ArrayList<Termin> Termin = new ArrayList<Termin>();				//erstellt ArrayList
						
					/* brauche ich hier eine for Schleife? - wie müsste sie Aussehen? */
						
					/* in einem Lösungsansatz habe ich etwas davon gehört, dass man das Datum mithilfe von
					 * dem java.util.GregorianCalendar speichern soll. wie macht man das? */
						
						Termin a = new Termin (2011, 10, 25, "Funktioniert");			//erstellt neuen Termin
						Termin.add (a);													//speichert neuen Termin in ArrayList
						
		}
	}
}

was ich immer noch nicht verstehe... es soll 2 Möglichkeiten geben einen neuen Termin zu erzeugen...?

Eine weitere Methode soll einen zweiten Termin als Parameter erhalten und als boolean-Wert zurück geben, ob das Datum des Termins mit dem Datum des übergebenen übereinstimmt. müsste dan so aussehen? - wie muss ich in meinem Fall a und b nennen?
Java:
 if ( a.equals(b) )   
	return "gleich";
	else "nicht gleich";
 

Kira_newbie

Aktives Mitglied
wenn ich das mit dem GregorianCalendar amchen will müsste ich doch meine Initalisierung hierdurch ersetzen? :
GregorianCalendar(int jahr, int monat, int tag)
 
G

Gast2

Gast
was ich immer noch nicht verstehe... es soll 2 Möglichkeiten geben einen neuen Termin zu erzeugen...?
Eventuell nen zweiten Konstruktor erstellen?

ArrayList<Termin> Termin = new ArrayList<Termin>(); //erstellt ArrayList
Der Variablenname ist unglücklich gewählt... nenn die Liste doch lieber... termine!

/* in einem Lösungsansatz habe ich etwas davon gehört, dass man das Datum mithilfe von
* dem java.util.GregorianCalendar speichern soll. wie macht man das? */
Java Date und Calendar

Eine weitere Methode soll einen zweiten Termin als Parameter erhalten und als boolean-Wert zurück geben, ob das Datum des Termins mit dem Datum des übergebenen übereinstimmt. müsste dan so aussehen? - wie muss ich in meinem Fall a und b nennen?
Dein Code gibt nen String zurück, es ist aber nen boolean gefordert.
in der Regel überschreibt man die equals Methode der Klasse um sowas zu realisieren.
equals() in Java | ingokallenbach.de
 

Kira_newbie

Aktives Mitglied
andere Frage. wieso funktioniert das hier nicht?
Java:
 public String toString(){
		 if (notiz == "");	
		 {
		 	String description1;
	    	description1 = "Datum:  " + jahr + "." + monat + "." + tag +  "]" + "      [Notiz:   " + notiz + "]";	    	
	    	return description1;}
	    
		 else
		 	String description2;
	    	description2 = "Datum:  " + jahr + "." + monat + "." + tag +  "]" ;	    	
	    	return description2; 	 }
 

2AndAHalfBit

Aktives Mitglied
Hi,

ist ja recht lustig hier.

wieso ist der Name Termin schlecht gewählt? der Name muss der Klassenname sein, und der ist Termin?

Der Name ist schlecht gewählt, weil er Singular ist. Collections speichern meinst mehrere Werte, von daher sollte man die Pluralform wählen oder aber kennzeichnen, dass es sich um eine Liste handelt (Termine, TerminList, TerminCollection, ...).

Zu deiner toString-Methode. Ich sehe auf anhieb die folgenden Fehler:

1. Eine Bedingung wird nicht mit einem ";" abgeschlossen.
2. Warum verendest du 2 Strings? Du brauchst nur einen, da er semantisch den selben sinn hat.
3. Du solltest den "+" operator vermeiden.

Grüße
 
G

Gast2

Gast
Der Name ist schlecht gewählt, weil er Singular ist. Collections speichern meinst mehrere Werte, von daher sollte man die Pluralform wählen oder aber kennzeichnen, dass es sich um eine Liste handelt (Termine, TerminList, TerminCollection, ...).
Nein, nein. Variablen schreibt man klein!

Java:
if (notiz == "");
Da muss wie schon gesagt das ; am Ende weg, sonst wird die Anweisung direkt beendet und der nächste Block wird ausgeführt.
Außerdem vergleicht man Strings (und Objekte allgemein) mit equals.

3. Du solltest den "+" operator vermeiden.
Nein, das ist schon in Ordnung, das wird vom Compiler optimiert. Lediglich in Schleifen sollte man aufpassen, dass man da nicht unnötig String Instanzen erzeugt.
 
G

Gast2

Gast
== ist bei Strings aber schlichtweg falsch. Dass das bei dir jetzt funktioniert ist zufall da der "" String vermutlich im String Pool liegt.
Ersetz einfach
Code:
if (notiz == "")
durch
Code:
if (notiz.equals(""))
 

hdi

Top Contributor
also ich habe jetzt [...] mal == gelassen, funktioniert einwandfrei.
Anfängerglück :) Hör auf EikeB, da kann ganz schnell etwas rauskommen was du nicht erwartest. Gerade bei Strings ist das mit == übel, da sie Immutable sind und alle Methoden einen neuen String zurückliefern. Dann ist dann ganz schnell != einem Literal. Ok, vllt kommen die neuen Strings sogar auch aus dem Pool , aber darüber macht die Doc keine Aussage, also kann man sich nicht darauf verlassen.

Um's einfach zu sagen: == prüft nicht, ob zwei Strings den selben Inhalt haben:

Java:
String s1 = new String("Hey");
String s2 = new String("Hey");
System.out.println( s1 == s2 );

edit too late, aber du solltest das mal testen
 

Kira_newbie

Aktives Mitglied
Anfängerglück :) Hör auf EikeB, da kann ganz schnell etwas rauskommen was du nicht erwartest. Gerade bei Strings ist das mit == übel, da sie Immutable sind und alle Methoden einen neuen String zurückliefern. Dann ist dann ganz schnell != einem Literal. Ok, vllt kommen die neuen Strings sogar auch aus dem Pool , aber darüber macht die Doc keine Aussage, also kann man sich nicht darauf verlassen.

Um's einfach zu sagen: == prüft nicht, ob zwei Strings den selben Inhalt haben:

Java:
String s1 = new String("Hey");
String s2 = new String("Hey");
System.out.println( s1 == s2 );

edit too late, aber du solltest das mal testen

ja, ich weiß, dass es es irgendwas damit zu tun hat, dass == nur die Gleichheit der Objekte prüft oder so.... :)
 

Kira_newbie

Aktives Mitglied
Java:
 	GregorianCalendar(int year, int month, int date, String notiz){			//Konstruktor
	
			this.year = year;												//Initialisierung
			this.month = month;
			this.date = date;
			this.notiz = notiz;

Return type for the methode is missing?

kann ich die notiz da überhaupt mit reinpacken? wohl eher nicht? was für nen retun type hat GregorianCalendar?
 
G

Gast2

Gast
Ähm, was genau versuchst du da ???:L
Schreibst du dir da grad ne eigene Klasse GregorianCalendar?
 

hdi

Top Contributor
Ja, oder so ;)

Wenn du's genau und korrekt ausgedrückt wissen willst: == prüft auf Identität. Zwei Objekte sind dann, und nur dann, identisch, wenn sie die selbe Referenz haben:

Java:
Object o1 = new Object();
Object o2 = o1;

Allerdings möchte man oft gar nicht auf Identität prüfen, sondern auf Gleichheit, also nicht Gleichheit aus Sicht des Speichermodells, sondern Gleichheit aus semantischer Sicht auf die Objekte. Und für Gleichheit verwendet man eben equals().
 
G

Gast2

Gast
Du scheinst da aber eine Art Konstruktor schreiben zu wollen...
Statt tag/monat/jahr einzeln zu speichern, speicherst du die drei Angaben in einem GregorianCalendar objekt.

Deine Klasse sieht dann irgendwie so aus:
Java:
public class Termin {
    private GregorianCalendar date;
    private String note;

    public Termin(int tag, int monat, int jahr, String note) {
        // verarbeiten
    }
}
 
M

Marcinek

Gast
Hi,

schon mal dran gedacht ein Buch oder Tutorial zu lesen und da den Aufbau von Klassen und Funktionen zu evaluieren?

Hier läuft so ein Endlosthreadmit jedem kleinen Fehler.

---

Nein du kannst du Konstruktoren nutzen, die es auch gibt. Diesen gibt es nicht.

Der Fehler bezieht sich auf deine Methode, die einen Rückgabewert erwartet es aber keinen gibt.

Gruß,

Martin
 

Kira_newbie

Aktives Mitglied
so. solangsam bekomme ich die Kurve :)
habe jetzt mal ein bisschen meinen Grips eingeschalten und das hier zusammengeschrieben:
(funktioniert soweit auch einwandfrei)

Java:
public class Termin{
	
	private int jahr,monat,tag;															
	private String notiz;
	
	
	

	public Termin(int tag, int monat, int jahr, String notiz) {							
		 this.jahr = jahr;                                               
         this.monat = monat;
         this.tag = tag;		
		 this.notiz=notiz;
		
	}
		

	
	public String toString(){
    	if (notiz.equals("")){           
    		return "Termin[Datum:  " + jahr + "." + monat + "." + tag +  "]" + "		[Notiz: " + "keine Notiz vorhanden" + " ]";                
        }
    	else
       return "Termin[Datum:  " + jahr + "." + monat + "." + tag +  "]"+ "		[Notiz: " + notiz + " ]";         	
	}
	 
}

Java:
import java.util.*;

public class Terminplaner {

	
	
	private ArrayList<Termin> termine = new ArrayList<Termin>();								
	
	public Terminplaner (){													
	
		Termin a = new Termin (2011, 10, 25, "Funktioniert");								
		termine.add (a);																	
		Termin b = new Termin (2011, 11, 01, "");											
		termine.add (b);		
		
		
		
		printAllTermine();
	}	
	
	public void printAllTermine(){
		for(int i=0;i<termine.size();i++){
			System.out.println(termine.get(i));
		}
	}
		
	public void zeigeTermin (Termin a){		
}
	
public void zeigeAlleTermin (){		
}

public void zeigeTermine (int ab, int anzahl){		
}



public void neuerTermin (Termin a){
	termine.add(a);
	
}
	
	public static void main(String[] args){
			new Terminplaner();		
			
			
			
	}
}
 
Zuletzt bearbeitet:

Kira_newbie

Aktives Mitglied
Aufgabenstellung ist ja immernoch folgende:

Erstellen Sie eine Klasse Termin. Sie soll ein Datum als Tag, Monat und Jahr
und eine Notiz speichern. (bis hierhin habe ich es ja schon) Es soll zwei Möglichkeiten geben, einen neuen Termin zu erzeugen (verwirrt mich immernoch) Das Datum muss immer angegeben werden; der Notiz-Parameter ist optional. (habe ich über die if-Abfrage geregelt)
Fügen Sie der Klasse eine toString()-Methode hinzu, die Datum und Notiz in geeigneter Form als String zurück gibt. (erledigt) Eine weitere Methode soll einen zweiten Termin als Parameter erhalten und als booleanWert zurück geben, ob das Datum des Termins mit dem Datum des übergebenen bereinstimmt. (hier haperts noch etwas)

Implementieren Sie die Klasse Terminplaner. Sie soll Termine als ArrayList<Termin>, also eine Liste von Terminen, speichern.
Ihre Klasse soll die folgenden Methoden unterstützen:
• Terminplaner(): Konstruktor für den Terminplaner, der die ArrayList initialisiert.
• void neuerTermin(Termin t): Fügt einen Termin hinzu.
• void zeigeTermine(Termin t): Zeigt all diejenigen Termine an, die das selbe Datum wie der übergebene Termin besitzen.
• void zeigeTermine(int ab, int anzahl): Zeigt die übergebene Anzahl von
Terminen ab der übergebenen Indexposition in der Liste an (es handelt sich hierbei nicht um ein Datum). Beachtet, dass innerhalb einer ArrayList das erste Element den Index 0 besitzt.
• void zeigeAlleTermine(): Zeigt alle Termine des Terminplaners an.

die Methoden habe ich alle eingebaut.
kann mal jemand drüberschauen, ob das so funktioniert?
 

Kira_newbie

Aktives Mitglied
hier hab ich doch was schönes gefunden :)
Java:
import java.util.*;

public class MyDate
{
	GregorianCalendar date;

	public MyDate(int jahr, int monat, int tag)
	{
		date = new GregorianCalendar(jahr, monat-1, tag);
	}
	
	public String toString()
	{
		String result = "" + date.get(Calendar.DAY_OF_MONTH);
		result += "." + (date.get(Calendar.MONTH)+1);
		result += "." + date.get(Calendar.YEAR);
		return result;
	}
	
	public int getDaysPassed()
	{
		GregorianCalendar now = new GregorianCalendar();
		long delay = now.getTimeInMillis() - date.getTimeInMillis();
		delay /= 1000L * 3600L * 24L;
		return (int)delay;
	}
	
	public boolean isSameYear(MyDate other)
	{
		return date.get(Calendar.YEAR) == other.date.get(Calendar.YEAR); 
	}
	
	public static void main(String[] args)
	{
		MyDate datum = new MyDate(2010, 2, 19);
		MyDate d2 = new MyDate(2010, 5, 5);
		System.out.println(datum.isSameYear(d2));
	}
}
 

Kira_newbie

Aktives Mitglied
also, ich habe mich jetzt dafür entschieden keinen Gregorian zu benutzen, da es nicht ausdrücklich in der Aufgabenstellung steht.
nach meinem Ermessen ist die Aufgabe wie folgt korrekt gelöst. Kann da bitte mal jemand drüberschauen?

Java:
public class Termin{
	
	private int jahr,monat,tag;															
	private String notiz;

	public Termin(int tag, int monat, int jahr, String notiz) {							
		this.jahr = jahr;                                               
        this.monat = monat;
        this.tag = tag;		
		this.notiz=notiz;		
	}
	
	public String toString(){
    	if (notiz.equals("")){           
    		return "Termin:  " + jahr + "." + monat + "." + tag +"    -      " +"Notiz: keine Notiz vorhanden";              
        }
       return "Termin:  " + jahr + "." + monat + "." + tag +"   -      " +"Notiz: " + notiz;          	
	}	 
	
	public boolean gleicherTag(Termin t){
		return jahr==t.jahr && monat==t.monat && tag==t.tag;
	}
}
Java:
import java.util.*;

public class Terminplaner {	
	
	private ArrayList<Termin> termine = new ArrayList<Termin>();								
	
	public Terminplaner (){	
		
		Termin a = new Termin (2011, 10, 25, "Funktioniert");								
		termine.add (a);																	
		Termin b = new Termin (2011, 11, 01, "");											
		termine.add (b);		
		
		zeigeAlleTermine();
	}	
	
	public void zeigeAlleTermine(){
		for(int i=0;i<termine.size();i++){
			System.out.println(termine.get(i));
		}
	}	
	public void zeigeTermin (Termin a){		
		for(int i=0;i<termine.size();i++){
			if(a.gleicherTag(termine.get(i)))
			System.out.println(termine.get(i));
		}
	}		
	public void neuerTermin (Termin a){
		termine.add(a);		
	}
	public void zeigeTermine (int ab, int anzahl){
		for(int i=ab;i<ab+anzahl;i++){
			System.out.println(termine.get(i));
		}
	}	
	public void neuerTermin(int y, int m, int d, String n) { termine.add(new Termin(y,m,d,n));}

	public static void main(String[] args){
	new Terminplaner();			
			
	}
}
dazu nochmal die Aufgabenstellung:
Erstellen Sie eine Klasse Termin. Sie soll ein Datum als Tag, Monat und Jahr und eine Notiz speichern. Es soll zwei Möglichkeiten geben, einen neuen Termin zu erzeugen: Das Datum muss immer angegeben werden; der Notiz-Parameter ist optional.
Fügen Sie der Klasse eine toString()-Methode hinzu, die Datum und Notiz in geeigneter Form als String zurück gibt. Eine weitere Methode soll einen zweiten Termin als Parameter erhalten und als booleanWert zurück geben, ob das Datum des Termins mit dem Datum des übergebenen übereinstimmt.

Implementieren Sie die Klasse Terminplaner. Sie soll Termine als ArrayList<Termin>, also eine Liste von Terminen, speichern.
Ihre Klasse soll die folgenden Methoden unterstützen:
• Terminplaner(): Konstruktor für den Terminplaner, der die ArrayList initialisiert.
• void neuerTermin(Termin t): Fügt einen Termin hinzu.
• void zeigeTermine(Termin t): Zeigt all diejenigen Termine an, die das selbe Datum wie der übergebene Termin besitzen.
• void zeigeTermine(int ab, int anzahl): Zeigt die übergebene Anzahl von
Terminen ab der übergebenen Indexposition in der Liste an (es handelt sich hierbei nicht um ein Datum). Beachtet, dass innerhalb einer ArrayList das erste Element den Index 0 besitzt.
• void zeigeAlleTermine(): Zeigt alle Termine des Terminplaners an.
 

hdi

Top Contributor
Die Angabe der Notiz beim Erzeugen eines Termins soll optional sein, das ist sie bei dir nicht. Du brauchst einen zweiten Konstruktor, der lediglich das Datum erwartet. Am besten du delegierst in diesem Konstruktor an den völlständigen Konstruktor, wobei du halt einen leeren String als Notiz übergibst:

Code:
this( ...., "");

Weiterhin solltest du in deiner public void zeigeTermine (int ab, int anzahl) noch eine Fehlerbehandlung einbauen. Es kann sein dass du über die Grenzen der Liste hinausstößt. zB wenn sie nur 5 Termie hat, und man ruft die Methode auf mit (4, 4). Prüfe also, ob ab + anzahl noch innerhalb der Liste liegt, und wenn nein, gib eine Fehlermeldung aus.

Ansonsten nur noch eine Kleinigkeit:
Deine Methode zeigeTermin(Termin a) sollte zeigeTermine(Termin a) heißen ;)

Der Rest ist richtig, wenn ich mich nicht verkuckt hab.
 

Kira_newbie

Aktives Mitglied
okay. also zuerst mal vielen Dank, dass du drüber geschaut hast.
das mit der Optionalen Notiz wollte ich eigentlich mit der If abfrage machen, dass man einfach keine Notiz angibt, wenn man keine hat (über die if abfrage wird dan ein "keine Notiz vorhanden" ausgegeben)

das mit der Fehlermeldung habe ich mir auch schon überlegt, aber ich weiß nicht genau, wie ich das implementieren soll :(
 

hdi

Top Contributor
das mit der Optionalen Notiz wollte ich eigentlich mit der If abfrage machen, dass man einfach keine Notiz angibt, wenn man keine hat (über die if abfrage wird dan ein "keine Notiz vorhanden" ausgegeben)

Die toString() Methode hat damit nix zu tun. Das ist ja nur die Anzeige einer Notiz, wenn sie bereits erstellt wurde. Aber Fakt ist dein Konstruktor verlangt einen String für die Notiz. Und wenn man halt keine hat, sollte man auch nicht "" oder so übergeben müssen, sondern einfach gar nichts. So ist das gemeint:

Java:
public Termin(int tag, int monat, int jahr){
      this(tag, monat, jahr, "");
}

public Termin(int tag, int monat, int jahr, String notiz) {                         
      this.jahr = jahr;                                               
      this.monat = monat;
      this.tag = tag;     
      this.notiz=notiz;       
}

Es gibt jetzt zwei Konstruktoren. Wenn du eine Notiz hast, kannste den unteren nehmen beim new-Aufruf. Wenn du keine hast, nimmst du den oberen, und musst dafür nix angeben. Intern leitet der dann an den unteren weiter mit einer leeren Notiz ("").

Das mit der Fehlermeldung habe ich mir auch schon überlegt, aber ich weiß nicht genau, wie ich das implementieren soll
Du weißt, wie ein if-else-Statement aussieht, und du weißt, wie du Text auf der Konsole ausgeben kannst. Wo ist nun das Problem?
 

Kira_newbie

Aktives Mitglied
Java:
public void zeigeTermine (int ab, int anzahl){
		for(int i=ab;i<ab+anzahl;i++){
			if("was muss hier rein?")))
			System.out.println(termine.get(i));
		 	else;
			System.out.printl("Fehler")
 
Zuletzt bearbeitet:

hdi

Top Contributor
Das müsstest du doch hinkriegen. Ich glaub es scheitert grad nicht an Java, sondern an Hirn :D Na wann ist denn ein get(i) okay, und wann nicht? Ich hab's ja eigentlich auch schon gesagt:
Es kann sein dass du über die Grenzen der Liste hinausstößt. zB wenn sie nur 5 Termie hat, und man ruft die Methode auf mit (4, 4). Prüfe also, ob ab + anzahl noch innerhalb der Liste liegt,
Kannst du das, was in dem Text oben fett gedruckt ist, denn nicht in einen booleschen Java-Ausdruck bringen? Du hast "ab", du hast "anzahl" und du hast die Größe der Liste, aka "size()". Das kriegste doch hin...
 

Kira_newbie

Aktives Mitglied
ja das müsste dan in die Richtung i<termine.size()

sry, aber ich bin echt durch für heute.... nach 7 stunden coden ... :oops:
 
Zuletzt bearbeitet:

Kira_newbie

Aktives Mitglied
aber so funktionierts auch nicht so wirklich....
Java:
public void zeigeTermine (int ab, int anzahl){
		for(int i=ab;i<ab+anzahl;i++){
			if( i<termine.size()))
			System.out.println(termine.get(i));
		 	else;
			System.out.printl("Fehler");
 

hdi

Top Contributor
else;

Wenn du das ; rausnimmst funktioniert es. Naja, kommt halt drauf an was man anzeigen will. Am einfachsten isses wohl, du brichst ab, sobald du über's Ziel hinausschießt:

Java:
        for(int i=ab;i<ab+anzahl;i++){
            if( i<termine.size()))
               System.out.println(termine.get(i));
            else{
               return;
            }
         }
 

2AndAHalfBit

Aktives Mitglied
Hi,

also ich möchte ja nicht fies zu dir sein. Deshalb versuche ich es mal höflich zu formulieren. Ich hoffe du fasst es auch so auf.

Es bringt dir nichts, wenn wir dir deine Compiler-Errors bereinigen. Man sieht ganz deutlich, dass du eklatante Schwächen hast. Besorg dir ein Java-Anfängerbuch und arbeitete es durch. So wie es aussieht fehlt dir generell das Grundverständnis über die Infrastruktur einen jeden Computerprogramms.

Ich nehme an, dein letzter Post soll eine Methode sein, die einen initialisierten Kalender zurückgibt. Eine solche Methode muss auch etwas zurückgeben, das heisst es fehlt ein Return-Statement.

Grüße,
 

Gossi

Bekanntes Mitglied
Mein tutor hat mir heute mitgeteilt, dass ich 0 Punkte fuer die aufgabe habe :(

Vielleicht war deine Aufgabenstellung minimal anders?
Und, sorry wenn das falsch rüberkommt, aber du hast, so wie ich das Lese/Verstehe, nun stumpf den Code von hier Kopiert und selber nichts geschrieben, falls das der Fall ist, hast du es eigentlich auch nicht anders verdient :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Terminplaner, Daten vergleichen. Java Basics - Anfänger-Themen 5
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
HolyFUT Javax Websocket API implementieren Java Basics - Anfänger-Themen 14
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
P9cman Ampel in Java implementieren Java Basics - Anfänger-Themen 3
districon Generics implementieren Java Basics - Anfänger-Themen 2
W UML Diagramm implementieren Java Basics - Anfänger-Themen 2
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
R Taxistand Implementieren Java Basics - Anfänger-Themen 1
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Gaudimagspam BMI in Java implementieren Java Basics - Anfänger-Themen 38
T Methode implementieren Java Basics - Anfänger-Themen 21
R Implementieren einer iterativen und rekursiven Klassenmethode. Java Basics - Anfänger-Themen 1
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
B UML-Klassendiagram get und set implementieren Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
E Klassen implementieren Java Basics - Anfänger-Themen 94
S Tokenizer selbst implementieren Java Basics - Anfänger-Themen 1
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
M WindowStateListener selbst implementieren Java Basics - Anfänger-Themen 8
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
F Kindklassen sollen Ihre Methoden selbst implementieren Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
N Stacks und Queues Implementieren Java Basics - Anfänger-Themen 2
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
Shizmo Methoden Formel besser implementieren Java Basics - Anfänger-Themen 8
X Polynome implementieren Java Basics - Anfänger-Themen 3
O Methoden implementieren, Sichtbarkeiten, Brüche Java Basics - Anfänger-Themen 104
D Erste Schritte Weitere Befehle implementieren Java Basics - Anfänger-Themen 27
D Erste Schritte Befehl back implementieren Java Basics - Anfänger-Themen 18
B Formel in Java implementieren Java Basics - Anfänger-Themen 4
M Suchbaum implementieren Java Basics - Anfänger-Themen 8
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
Hacer Interfaces implementieren Java Basics - Anfänger-Themen 7
C Zyklisch verkette Liste - Pop() methode implementieren Java Basics - Anfänger-Themen 2
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
K Klassen implementieren Java Basics - Anfänger-Themen 7
W Neue Klassenmethode implementieren.. Java Basics - Anfänger-Themen 6
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
C UML Diagramm in Java implementieren-Korrektur Java Basics - Anfänger-Themen 8
T Equal Methode implementieren Java Basics - Anfänger-Themen 22
C ZahlenMuster implementieren Java Basics - Anfänger-Themen 1
C Alte Klausuraufgabe - UML in Java implementieren Java Basics - Anfänger-Themen 1
D Erste Schritte spielfeld als Datenspeicher implementieren Java Basics - Anfänger-Themen 1
D spielfeld als Datenspeicher implementieren Java Basics - Anfänger-Themen 5
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
B Sortierte Liste implementieren Java Basics - Anfänger-Themen 3
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
D Weihnachtsbaum implementieren gescheitert. Java Basics - Anfänger-Themen 2
D Tannenbaum implementieren gescheitert Java Basics - Anfänger-Themen 1
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
F ArrayListen auf anderer Klasse implementieren Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
G Erbklasse verpflichten Methode zu implementieren Java Basics - Anfänger-Themen 3
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
B Binärbaum mit java implementieren! Java Basics - Anfänger-Themen 5
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
D Exception selbst Implementieren Java Basics - Anfänger-Themen 1
T QuickSort implementieren Java Basics - Anfänger-Themen 5
J Konstruktor implementieren, zahl 0 repräsentieren Java Basics - Anfänger-Themen 4
C Frage zum Kartenspiel implementieren Java Basics - Anfänger-Themen 9
shiroX OOP Java Funktion implementieren Java Basics - Anfänger-Themen 3
T Ampel implementieren Java Basics - Anfänger-Themen 12
S Interface Implementieren von Methoden aus einer Klasse in eine GUI Java Basics - Anfänger-Themen 6
H Methoden Implementieren "Drücken Sie eine beliebige Taste" Java Basics - Anfänger-Themen 5
G ActionListener implementieren Java Basics - Anfänger-Themen 12
G Szenario implementieren Java Basics - Anfänger-Themen 7
T Methode Implementieren Java Basics - Anfänger-Themen 15
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
T Interface implementieren mit Abstrakten Typen? Java Basics - Anfänger-Themen 4
T Interface Implementieren Java Basics - Anfänger-Themen 5
T Methoden Wie compareTo() Methode implementieren? Java Basics - Anfänger-Themen 9
D Artikel-Suche implementieren Java Basics - Anfänger-Themen 7
S Implementieren? Java Basics - Anfänger-Themen 9
R Alle Klassen ermitteln, die Interface implementieren / Reflection Java Basics - Anfänger-Themen 51
P einen binärbaum implementieren Java Basics - Anfänger-Themen 4
F JSlider korrekt implementieren Java Basics - Anfänger-Themen 19
D Wie Iterator Remove implementieren? Java Basics - Anfänger-Themen 11
U Automatenprüfung in Java implementieren — String Vergleich klappt nicht Java Basics - Anfänger-Themen 40
V Hilfe beim implementieren von Iterator Java Basics - Anfänger-Themen 5
T Vorbereitung für das Implementieren von Programmen Java Basics - Anfänger-Themen 3
B PriorityQueue im dijkstra Algorithmus implementieren Java Basics - Anfänger-Themen 4
H Automaten implementieren Java Basics - Anfänger-Themen 9
M Methoden implementieren? Java Basics - Anfänger-Themen 8
S Klasse als Attribut implementieren Java Basics - Anfänger-Themen 2
A Proxy Pattern implementieren Java Basics - Anfänger-Themen 2
Q Instanzvariablen implementieren - grundlegende Probleme Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben