Nummerierung bei Sammlungen mit ausgeben

  • Themenstarter Themenstarter dathvader0815
  • Beginndatum Beginndatum
D

dathvader0815

Gast
Guten Abend!

Ich habe folgende Klasse "Notizbuch" mit der sich Notizen speichern und ausgeben lassen.
Jede notiz hat eine Nummerierung die bei 0 anfängt und ich möchte, dass neben der notiz auch die notiznummer ausgegeben wird.
Ist das überhaupt möglich?

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

    /**
     * Führe die Initialisierungen durch, die für ein Notizbuch
     * notwendig sind.
     */
    public Notizbuch()
    {
        notizen = new ArrayList<String>();
    }

    /**
     * Speichere eine neue Notiz in diesem Notizbuch.
     * @param notiz die zu speichernde Notiz.
     */
    public void speichereNotiz(String notiz)
    {
        notizen.add(notiz);
    }

    /**
     * @return die Anzahl der Notizen in diesem Notizbuch.
     */
    public int anzahlNotizen()
    {
        return notizen.size();
    }

    /**
     * Zeige eine Notiz.
     * @param notiznummer die Nummer der Notiz, die gezeigt werden soll.
     */
    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 deinem Code:
Java:
	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 dem System.out, gib doch dort einfach die notiznummer mit aus? :autsch:
Java:
System.out.println(notiznummer + ") " + notizen.get(notiznummer));

Wieso fragst du nicht eig. nur >0 && < anzahlNotizen ab, dann kannst du dir die leeren if-Blöcke sparen ;>
 
Klar geht das:

Java:
public void zeigeNotiz(int notiznummer)
    {
// […]
        else if(notiznummer < anzahlNotizen()) {
            // Die Nummer ist gültig, wir können die Notiz ausgeben.
            System.out.println(notiznummer + ": " + notizen.get(notiznummer));
// […]
    }


EDIT: Zu langsam ^^
 
Ich hab nochmal eine andere Frage ich möchte die notiznummer auch bei der methode "alleNotizenAusgeben" mit ausgeben, leider funktioniert das nicht ganz so wie ich will kann mir jemand woran das leigt? Anscheinend wird die variable int notiznummer nicht gefunden was kann ich da machen? DAnke!

Java:
public void alleNotizenAusgeben()
    {
        int notiznummer = 0;
        int index = 0;
        while(index < notizen.size() )
        {
            System.out.println(notiznummer + ": " + notizen.get(index));
            index = index + 1;
        }
    }
 
manchmal ist eben doch der einfache weg der richtige :toll:

edit: für deine letze frage musst du ja irgendwie die variable übergeben das du sie wieder benutzen kannst!!
 
Ich hab nochmal eine andere Frage ich möchte die notiznummer auch bei der methode "alleNotizenAusgeben" mit ausgeben, leider funktioniert das nicht ganz so wie ich will kann mir jemand woran das leigt? Anscheinend wird die variable int notiznummer nicht gefunden was kann ich da machen? DAnke!

Java:
public void alleNotizenAusgeben()
    {
        int notiznummer = 0;
        int index = 0;
        while(index < notizen.size() )
        {
            System.out.println(notiznummer + ": " + notizen.get(index));
            index = index + 1;
        }
    }

Du machst ja auch mit der notiznummer nichts weiter... die wird mit 0 initialisiert und dann nicht mehr geändert. Was soll da bei rum kommen?

Java:
public void alleNotizenAusgeben()
    {
        for(int i = 0; i < notizen.size(); i++){
            System.out.println(i+ ": " + notizen.get(i));
        }
    }

@mariusbopp
so langsam frag ich mich ob du Postings sammelst 😉
 
Also ich meine, wie kann ich die Variable an die Methode übergeben? Geht das überhaupt?
 
welche Variable?
notizNummer in zeigeNotiz()? die war dort ein Parameter,
in alleNotizenAusgeben() kannst du genauso einen Parameter ausgeben, wobei es eher fraglich ist EINE Nummer für ALLE Notizen zu übergeben,
pro Notiz existiert die Zahl direkt nirgendwo mehr, nur noch als Position in der Liste

du könntest statt eines Strings ein höheres Notiz-Objekt in der Liste speichern, darin die Nummer + den String
 
Klar geht das:

Java:
public void zeigeNotiz(int notiznummer)
    {
// […]
        else if(notiznummer < anzahlNotizen()) {
            // Die Nummer ist gültig, wir können die Notiz ausgeben.
            System.out.println(notiznummer + ": " + notizen.get(notiznummer));
// […]
    }

Ähm steht doch shon da? So übergibt man einen Wert an eine Prozedur ...
Aber vielleicht versteh ich dich miss ;-)
 
das mit der variable habe ich geschrieben... ich wollte nicht gleich parameter schreiben da man ja auch mal kurz selber überlegen kann dann würde man ja auf parameter kommen :applaus:

was sinn macht ist wie du es geschrieben hast die nr. in ne liste und dann die gesamte liste übergeben so hast du alle nummern!
 
irgendwie wills nicht funktionieren... was mach ich falsch?


Java:
 public void alleNotizenAusgeben(int notiznummer)
    {
        int index = 0;
        while(index < notizen.size() )
        {
            if(notiznummer < 0)
            {
            }
            else if(notiznummer < anzahlNotizen())
                 {
                 System.out.println(notiznummer + ": " + notizen.get(index));
                 index = index + 1;
                 }
            else
            {
            }    
        }
    }
 
was funktioniert denn nicht?
du produzierst irren Code, soweit klar, aber die ganze Idee, in dieser Methode eine einzelne Variable zu haben ist schon verrückt,
was ist dein Ziel?

das einzige was direkt möglich erscheint, hat fassy um 15.55 gepostet, alles andere musst du erst erklären
 
Ich hab nochmal eine andere frage und möchte nicht extra einen neuen thread dafür aufmachen.
ich möchte eine methode schreiben mit der man nach einer notiz suchen kann.
Ich bekomme immer die Fehlermeldung "missing return statement"

Java:
 public String sucheNotiz(String suchwort)
     {
         int index = 0;
         while(index < notizen.size())
         {
             String notiz = notizen.get(index);
             if (notiz.contains(suchwort))
             {
                 return notiz;
                 
             }
                
            }
        }
 
habs jetzt selbst hinbekommen.

Java:
public String sucheNotiz(String suchwort)
     {
         int index = 0;
         while(index < notizen.size())
         {
             String notiz = notizen.get(index);
             if (notiz.contains(suchwort))
             {
                 return notiz;
             }
             index++;
             }
                 return "Fehler: Keine Notiz gefunden";
         }
 
Ich hab da noch eine aufgabe mit der ich ehrlich gesagt nicht so viel anfangen kann:

"Überladen Sie die Methode notizEntfernen() aus d). In diesem Fall soll der Methode eine
Zeichenkette übergeben werden. Es soll die erste gefundene Notiz gelöscht werden, die
diese Zeichenkette enthält. Die gelöschte Notiz soll ausgeben werden. Falls keine passende
Notiz gefunden wird soll eine entsprechende Fehlermeldung ausgegeben werden."

Es geht um diese Methode:

Java:
public void notizEntfernen(int notiznummer)
         {
             if(notiznummer < 0)
             {
             } 
             else if(notiznummer < anzahlNotizen())
             {
                 notizen.remove(notiznummer);
             }
             else
             {
             }
      }

Kann mir da bitte mal jemand weiterhelfen? Danke!
 
dieselbe Methode mit String als Parameter, dann suchen, z.B. die vorhandene Methode verwenden und die gefundene Notiz entfernen
 
Habs jetzt mal so probiert... Wo liegt der bzw. die Fehler?

Java:
 public void notizEntfernen(String suchwort)
     {
         int index = 0;
         while(index < notizen.size())
         {
             String notiz = notizen.get(index);
             if (notiz.contains(suchwort))
             {
                 notizen.remove(suchwort);
             }
             else
             {
                 System.out.println("Fehler: Keine Notiz gefunden");
                
         }
      }       
   }
 
Zuletzt bearbeitet von einem Moderator:
Ok ich hab index++; hinzugefügt, was ich komisch finde ist, wieso kommt jetzt immer die Fehlermeldung "if else without if"? Irgendie kann ich jetzt kein else mehr bei der if-Anweisung hinschreiben...
 
Ok ich hab index++; hinzugefügt, was ich komisch finde ist, wieso kommt jetzt immer die Fehlermeldung "if else without if"? Irgendie kann ich jetzt kein else mehr bei der if-Anweisung hinschreiben...

Sollen wir jetzt raten wo du
Code:
index++
hingeschrieben hast und was du sonst noch alles verändert hast? Wieso gibst du nicht jedes mal eine ausführliche Beschreibung + Code, das würde die ganze Sache beschleunigen! Vllt. wäre eine for-Schleife auch einfacher für dich?
Generell tut deine Methode ja auch nicht das, was in der Aufgabe gefordert ist. DU löschst so ggf, nicht nur die Erste, sondern alle wo das Suchwort enthalten ist, und ausgeben tust du sie auch nicht. Und der else-Teil so wie er war(den du jetzt vermutlich aber umgebaut hast?? ) soll bestimmt auch nicht bei jeder Notiz auftauchen oder? Aber das nur am Rande :>
 
Sollen wir jetzt raten wo du
Code:
index++
hingeschrieben hast und was du sonst noch alles verändert hast? Wieso gibst du nicht jedes mal eine ausführliche Beschreibung + Code, das würde die ganze Sache beschleunigen! Vllt. wäre eine for-Schleife auch einfacher für dich?
Generell tut deine Methode ja auch nicht das, was in der Aufgabe gefordert ist. DU löschst so ggf, nicht nur die Erste, sondern alle wo das Suchwort enthalten ist, und ausgeben tust du sie auch nicht. Und der else-Teil so wie er war(den du jetzt vermutlich aber umgebaut hast?? ) soll bestimmt auch nicht bei jeder Notiz auftauchen oder? Aber das nur am Rande :>


Sorry, hab vergessen den code mit anzufügen!
Java:
 public void notizEntfernen(String suchwort)
     {
         int index = 0;
         while(index < notizen.size())
         {
             String notiz = notizen.get(index);
             if (notiz.contains(suchwort))
             {
                 notizen.remove(notiz);
             }
             index++;
         
             {
                 System.out.println("Fehler: Keine Notiz gefunden");
             }
      }       
   }
 
Naja, entweder das
Code:
index++
mit rein in den if-Block, oder aber danach(was wohl mehr Sinn machen würde in dem Fall), aber nicht dazwischen :autsch:
Aber wie schon gesagt, vermutlich soll`s gar keinen else-Teil geben?!
Java:
	public void notizEntfernen(String suchwort) {
		int index = 0;
		while (index < notizen.size()) {
			String notiz = notizen.get(index);
			if (notiz.contains(suchwort)) {
				notizen.remove(notiz);
				System.out.println(notiz + " wurde gelöscht");
				return;
			}
			index++;
		}
		System.out.println("Fehler: Keine Notiz gefunden");
	}

:rtfm:
 
Danke eRaaaa.

Ich hab noch eine andere (letzte) Aufgabe, bei der ich nicht so wirklich weiss wie ich sie angehen soll:

"g. Versuchen Sie eine Realisierung der Methode aus Aufgabe f) unter Verwendung einer
while-Schleife welche die ArrayList per Index durchläuft und Notizen unter Verwendung
ihres Index löscht."

Hier ist noch Aufgabe f) und der dazugehörige code:

"f. Ergänzen Sie eine Methode alleNotizenEntfernen(), der eine Zeichenkette übergeben
wird. Es sollen alle Notizen entfernt werden, in denen diese Zeichenkette vorkommt.
Verwenden Sie hierzu einen Iterator. Die gelöschten Notizen sollen ausgegeben werden."


Java:
 public void alleNotizenEntfernen(String suchwort)
    {
     Iterator<String> it = notizen.iterator();
     while (it.hasNext())
     { 
        String notiz = it.next();
        if (notiz.contains(suchwort))
        {
            it.remove();
            System.out.println(notiz + " wurde gelöscht");
        }
    }     
}
 
Ist doch eig. fast der selbe Code wie ich ihn gepostet habe. Nur der remove Befehl muss angepasst werden und eine Zeile muss komplett raus 🙂
Wenn du den Code den ich gepostet habe verstehst, sollte die Aufgabe f) eig. keine Probleme darstellen?!
 
Ist doch eig. fast der selbe Code wie ich ihn gepostet habe. Nur der remove Befehl muss angepasst werden und eine Zeile muss komplett raus 🙂
Wenn du den Code den ich gepostet habe verstehst, sollte die Aufgabe f) eig. keine Probleme darstellen?!


Kannst du mir vielleicht nen Tipp geben, was genau an dem remove befehle geändert werden muss ich komm leider nicht drauf.
 
habs jetzt mal so gemacht leider wird immer nur eine notiz gelöscht woran liegt das?

Java:
 public void alleNotizenEntfernenAufgabeg(String suchwort) 
      {
        int index = 0;
        while (index < notizen.size()) 
        {
            String notiz = notizen.get(index);
            if (notiz.contains(suchwort)) 
            {
                notizen.remove(index);
                System.out.println(notiz + " wurde gelöscht");
                return;
            }
            index++;
        }
        
    }
 
Ich zitiere mich mal selbst:

Nur der remove Befehl muss angepasst werden und eine Zeile muss komplett raus 🙂
Wenn du den Code den ich gepostet habe verstehst, sollte die Aufgabe f) eig. keine Probleme darstellen?!

Tipp: Entferne die Zeile
eq.latex


🙂
 
Mensch versuche den Code doch endlich mal zu verstehen, welche Zeile könnte der Auslöser dafür sein, dass in dem ersten Code bei einem Fund die Methode beendet wird?
kann doch logischerweise nur in dem Teil passieren oder?
Java:
            if (notiz.contains(suchwort)) {
                notizen.remove(notiz);
                System.out.println(notiz + " wurde gelöscht");
                return;
            }

so viele Möglichkeiten gibts doch da gar nicht! Und nein, ich meinte nicht Zeile 16 :autsch:
 
Das return oder?
Trotzdem, wenn ich diese zeile entferne ändert das nichts die Methode funktioniert trotzdem nicht.
 
Beispiel.

Liste : foo , bar, foobar, hallo, welt;

Size = 5

Schleife = läuft von Index 0 -> Index 4

Suchwort = bar

du löschst Index 1, nun rutschen alle anderen Elemente nach!!!! --> foo, foobar,hallo,welt

nächster Index wäre 2 du überspringst also foobar!

Was musst du nun also zusätzlich tun, damit das nicht mehr passiert?

Achja : "funktioniert trotzdem nicht." <-- :toll:
 
Also ich verstehe was in dem code falsch läuft, ich muss eine Anweisung schreiben, die den index nach jeder gelöschten notiz um eins zurücksetzt oder nicht?
 
besser wäre:
1.
die Liste mit einem Iterator zu durchlaufen, da geht das remove, da musst du keine Indexe rechnen, das macht genau der
2.
einfacher nachzuvollziehen und wenig problemanfällig:
die zu entfernenden Elemente in einer separaten Liste sammeln, in der Hauptliste noch nix löschen,
erst am Ende die zweite Liste durchlaufen und die Elemente aus der Hauptliste löschen
 
In der Aufgabe steht, dass wir die methode mit einer while Schleife realisieren sollen.
Hier nochmal die Aufgabe:

g. Versuchen Sie eine Realisierung der Methode aus Aufgabe f) unter Verwendung einer
while-Schleife welche die ArrayList per Index durchläuft und Notizen unter Verwendung
ihres Index löscht.

Java:
  public void alleNotizenEntfernenAufgabeg(String suchwort) 
      {
        int index = 0; 
        while (index < notizen.size()) 
        {
            String notiz = notizen.get(index);
            if (notiz.contains(suchwort)) 
            {
                notizen.remove(notiz);
                System.out.println(notiz + " wurde gelöscht");
               
            }
            index++;
        }
        
   
    }
  [JAVA/]

Hier ist der (nicht funktionierende) code.
erraaa hat ja geschreiben man muss nur eine Zeile entfernen und die Methode würde funktionieren. Ich komm leider nicht drauf welche Zeile das ist.
 
> erraaa hat ja geschreiben man muss nur eine Zeile entfernen

5 sec die Beiträge dazu überfolgen und erkannt dass es 'eRaaaa' dort um das 'return;' ging, welches du nun ja auch nicht mehr drinhast,
bisschen mitdenken bitte

mit den Indexen hatte das nichts zu tun, dazu wurde die Lösung aber auch schon diskutiert,
dann ja, meinetwegen genau
"ich muss eine Anweisung schreiben, die den index nach jeder gelöschten notiz um eins zurücksetzt"

Anmelden um verkorkste Java-Code-Postings zu korrgieren ist weiterhin auch nicht drin?
bei solch einem Einsatz hilft man ja gerne..
 
Naja, was da schief geht hat er ja schon geschrieben:
Code:
a b c d e f g h i j k l m
^ hier steht der index

1. Schritt:
a soll nicht gelöscht werden. der index wird nach rechts verschoben:
a b c d e f g h i j k l m
  ^

2. Schritt:
b wird gelöscht:
a c d e f g h i j k l m
  ^
und der index wieder nach rechts verschoben:
a c d e f g h i j k l m
    ^

3. Schritt:
...

Was fällt dir dabei auf? Tipp: es hat was mit
Code:
c
zu tun
 
Mann muss quasi eine Anweisung hinzufügen, dass der index nach einer gelöschten notiz nicht eins weiter nach rechts verschoben wird. Aber wie setzt man das im java code um?
 
ich mein, so wie du es grad beschreiben hast müsste der code ja so aussehen:
Java:
 public void alleNotizenEntfernenAufgabeg(String suchwort) 
      {
        int index = 0; 
        while (index < notizen.size()) 
        {
            String notiz = notizen.get(index);
            if (notiz.contains(suchwort)) 
            {
                index--;
                notizen.remove(notiz);
                System.out.println(notiz + " wurde gelöscht");
               
            }
           
        }
        
   
    }
 
nein, so habe ich es nicht geschrieben,

ein Satz war
"im if index--;"
das hast du zwar umgesetzt, aber das index++; fehlt jetzt ohne rechten Grund

dann habe ich noch eine zweite andere Möglichkeit beschrieben, dasselbe zu erreichen
"bzw. im if nix tun und das index++ nur ins else"
da wird index++; geändert, wandert in ein else, aber ganz verschwinden tut es auch nicht


war zwar nicht besonders ausführlich von mir beschrieben, aber damit musst du leben,
z.B. hättest du deine Änderung doch sehr gut mit und ohne index++; an alter Stelle testen können, warum auch immer das nun in Frage war,
dauert vielleicht 5 Min. länger vor dem nächsten Frage-Posting, dafür immerhin was geleistet, vielleicht Erkenntnisse gewonnen

außerdem hattest du doch schon vor langer Zeit selber erkannt
"ich muss eine Anweisung schreiben, die den index nach jeder gelöschten notiz um eins zurücksetzt"
einfach mal Luft holen und das in Ruhe umsetzen, so viele Varianten gibts doch gar nicht
 
Ok, danke habs jetzt hinbekommen.

Ich hab allerdings noch ne letzte Frage^^ Folgenede Aufgabe :
d. "Ergänzen Sie eine Methode notizEntfernen(). Dieser Methode soll der Index der zu entfernenden
Notiz übergeben werden. Beobachten Sie, was passiert, wenn ein falscher Index
verwendet wird. Sichern Sie die Methode gegen einen übergebenen falschen Index
ab."

Java:
  public void notizEntfernen(String suchwort) 
       {
        int index = 0;
        while (index < notizen.size()) 
        {
            String notiz = notizen.get(index);
            if (notiz.contains(suchwort)) 
            {
                notizen.remove(notiz);
                System.out.println(notiz + " wurde gelöscht");
                return;
            }
            index++;
        }
        System.out.println("Fehler: Keine Notiz gefunden");
    }


Ich soll die Methode gegen einen falschen übergebenen index sichern. Aber wie geht das? ich hab im code jetzt mal sozusagen provisorisch eine Fehlermeldung eingefügt aber ich denke nicht, dass das in der aufgabe gemeint war.
Gibt es eine Möglichkeit die Methode gegen einen übergebenen falschen index abzusichern?
 

Neue Themen


Zurück
Oben