Generische Klasse, Objekt

import java.util.ArrayList;
public class Notizbuch
{
    // Speicher für eine beliebige Anzahl an Notizen.
    private ArrayList<String> notizen;

    
    public Notizbuch()
    {
        notizen = new ArrayList<String>();
    }
    public void speichereNotiz(String notiz)
    {
        notizen.add(notiz);
    }
    public int anzahlNotizen()
    {
        return notizen.size();
    }
    public void zeigeNotiz(int notiznummer)
    {
        if(notiznummer < 0) {
            // Keine gültige Nummer, nichts zu tun.
        }
        else if(notiznummer < anzahlNotizen()) {
            // Die Nummer ist gültig, wir können die Notiz ausgeben.
            System.out.println(notizen.get(notiznummer));
        }
        else {
            // Keine gültige Nummer, nichts zu tun.
        }
    }
}

In dieser Klasse, möchte ich eine Methode schreiben, die ein Objekt, auf das die Variable treffen verweist, in die Sammlung notizen einfügen?
Ich weiß leider nicht weiter.
Kann mir jemand helfen?
Würde mich freuen.

Welche Variable “treffen”?

Nebenbei: Bitte Java-Tags für Code benutzen.

Zeile 23 bis 32 ist sehr schön, aber ich würde hier die s. g. ‘Composition’ empfehlen. Unabhängig davon, Notizen brauchen eine id, Nummer, Datum, Autor, Priorität, offen/nicht offen und so etwas. deal?

‘treffen’ aus dem Context nicht ersichtlich.

Unabhängig von deiner Frage noch drei Anmerkungen zu deiner zeigeNotiz-Methode:

  • In vielen Fällen ist es schlecht, im Fehlerfall einfach nichts zu tun. Die Frage ist, ob hier wirklich ein Fehler vorliegt. Ich würde sagen ja: Wenn jemand die Notiz zu einen nicht vorhandenen Index anfordert, ist etwas schief gelaufen, und das sollte nicht “verschluckt” werden, sondern irgendwo sollte eine kleine rote Warnleuchte blinken (z.B. ein Fehler geworfen werden)
  • Die Methode verletzt das Single Responisbility Principle, in dem sie zwei Sachen tut: Wert heraussuchen und Wert anzeigen. Das sollte getrennt werden. Es gibt nämlich zwei (und nicht, wie das SRP fordert, einen) Gründe, warum sich die Methode ändern könnte: Zum einen könnte der Speichermechanismus von Notizen sich ändern (etwa Map statt List), zum anderen könntest du den Wert anderswo als in der Konsole gebrauchen (Log, Datenbank, GUI…).
  • Die Methode verletzt auch das Model-View-Controller-Pattern. In der Regel sollte eine Klasse wie Notizbuch gar nichts ausgeben, sie gehört konzeptionell zum Model und ist damit passiv, wird also “benutzt”. Sie weiß, um welche Daten es geht, aber nicht, in welchem Kontext diese benötigt werden. Notizbuch sollte z.B. ohne Änderungen in einer Konsolen-, GUI- oder Webanwendung verwendet werden können. Die Ausgabe ist normalerweise eine Aufgabe der View. Bei einfachen Programmen, insbesondere für Konsole, können auch View und Controller zusammengefasst werden, weil die Arbeit der View in diesem Fall trivial ist.

Danke für die Antworten. Aber Notizbuch ist auch nur primitiv, lediglich um Java zu lernen. Die oben gestelllte Aufgabe von mir : “möchte ich eine Methode schreiben, die ein Objekt, auf das die Variable treffen verweist, in die Sammlung notizen einfügen?”
ist aus einem Buch und ich habe die Aufgabe auch nicht verstanden

andere zu fragen ist ein Weg, aber spätestens nun sollte klar sein, dass dies Kauderwelsch ist aus dem niemand etwas sinnvolles bestimmen kann,

die Methode speichereNotiz() ist freilich bereits ein wenig passend,
hat man woanders einen String (nicht direkt allgemein Objekt) kann man mit Aufruf buch.speichereNotiz(treffen); etwas tun

falls noch nicht zufrieden:
wenn es eine Aufgabe einer vor dir respektierten Instanz ist wie Schule, Uni, Arbeitgeber, dann musst du ggfs. da nachfragen,
anderenfalls schlicht nicht beachten und dich nur mit klaren Dingen beschäftigen, nicht jeder Unsinn ist auch eine gute Übung

edit:
ah, das Buch ‚Java lernen mit BlueJ‘, Seite 132, Übung 4.6 :wink:
klingt langsam wirklich danach dass außerhalb der Klasse eine Methode geschrieben werden soll die das Objekt der Klasse Notizbuch benutzt, wie schon angedeutet,
was hast du für 4.4 gemacht?

edit:
Java lernen mit Blue J - Lösungen ankri.de | ankri.de - Java, Android, Programming & Stuff

notizen.add(treffen);

schlicht…

Genau. Das Buch ist es :smiley:
Manchmal sind Aufgaben so leicht, dass man viel komplizierter denkt …:idea:
Aufgabe 4.6 habe ich ausgelassen, weil sie mir zu blöd war

*** Edit ***

Und Vielen Dank :lol:

Ich konnte aus dem Satz auch nix ableiten, whrs hab ich schiss oder nicht richtig zugehört.

Also private Variable liste, mini Komposition, Klasse erstellt/init Instanz. add remove vorhanden. Die Frage ist, wie wird eine “Notiz” angesprochen, also was sei der Index oder equals().

Sind mehrere getter() eigentlich erlaubt?

Unabhängig davon, Buch/Tutoriel zur Seite legen oder diese Aufgabe umgehen, der Satz kann (bisher) keinen Sinn ergeben, morgen Aufg. noch-mal anschauen… Grüße…

Es ist so ruhig hier. Mann kann/könnte das auch so machen:

Also ungültiger Parameter nicht einfach ignorieren, sondern eine neue Exception generieren.

Auf 256 ist es nicht beschränkt, aber anscheinend kann das Einfügen auch mal schieflaufen.

Und das ist, innerhalb der Klasse Notizen wird notizen erstellt und ist auch nur innerhalb der Klasse Notizen ‘sichtbar’. (@ all : Was könnte man verbessern?)


public class Notizen {
	private final ArrayList<String> notizen = new ArrayList<String>(256);
	
	public Notizen() { // empty
	}
	
	public int getSize() {
		return notizen.size();
	}
	
	public boolean add(String n) {
		return notizen.add(n);
	} // + add at idx
	
	public Notizen add1(String n) {
		return notizen.add(n) ? this : null;
	} // + add at idx
	
	public String get(int idx) {
		if (idx < 0 || idx >= notizen.size()) {
			throw new IllegalArgumentException("Etwas stimmt hier nicht, es ist so ruhig.");
		}
		return notizen.get(idx);
	}
	
	public static void main(String[] args) {
		Notizen not = new Notizen().add1("BrabbelBrabbel").add1("Brabbbel").add1("Brabbbbel").add1("Brabbbbbel");
		System.out.println(not.get(3));
	}
}```