Problem mit Iterator bzw. Sortierte Liste

Status
Nicht offen für weitere Antworten.

Loire

Mitglied
Hallo!
Wir sollen als Hausaufgabe eine sortierte Liste mit n Werten (n zufällig von 10-50) mit Zufallszahlen von 1 bis 1000, welche sortiert eingefügt werden sollen, erzeugen. Dazu sollen wir die LinkedList<Integer> und den ListIterator benutzen.
Mein Code fügt zwar Werte hinzu aber leider nicht in der richtigen Reihenfolge. Bin schon am verzweifeln ;(
Kann mir bitte jemand helfen?
Vielen, vielen dank im vorraus.

Edit: bin inzwischen schon so weit, dass nur noch das letzte Element in der Liste nicht in der richtigen Reihenfolge ist.. *seufz*

Java:
import java.util.LinkedList;
import java.util.ListIterator;

public class LLexample {
	
	LinkedList<Integer> theList = new LinkedList<Integer>(); // an empty list
	int n; // stores the size of the list
	
	int intGenerator() {
		return (int)(999.0*Math.random())+1;
	}
	
	public LLexample() {
		filltheList();
	}
	
	public void filltheList(){
		n = (int)(40.0*Math.random())+10;  // Zufallszahlen von 10-50
		int zufall;
		
		//wird n mal ausgeführt
		for(int index = 1; index <= n; index++){
			ListIterator<Integer> iterator = theList.listIterator(0);
			zufall = intGenerator(); //zufallswert erzeugen
			
		if (theList.isEmpty()){ //falls es der erste Eintrag ist
			theList.addFirst(zufall);
			continue;
			
		}
		//solange bist wir am Ende der Liste sind oder wir einfügen können
		while((iterator.hasNext())&&(zufall>=iterator.next())){}
		
		//Wenn der richtige Platz gefunden wurde einfügen
		theList.add(iterator.previousIndex(), zufall);
			
		}
	}
 
Zuletzt bearbeitet:

dngfng

Aktives Mitglied
Java:
//solange bist wir am Ende der Liste sind oder wir einfügen können
while((iterator.hasNext())&&(zufall>=iterator.next())){}
	        
//Wenn der richtige Platz gefunden wurde einfügen
theList.add(iterator.previousIndex(), zufall);

Das ist das du vergisst den zu überschreibenden Wert nicht zwischenspeicherst.
Daher wird der Wert auf Position previousIndex mit dem neuen Zufalls wert überschrieben.

Du müsstest hier zuerst alle folgenden Wert um eine Index Position nach hinten verschieben.
Und dann erst denn neuen Zufalls Wert an die Position einfügen.
 

Ebenius

Top Contributor
Auf keinen Fall sollte man eine Liste verändern, während man deren Iterator benutzt. Das führt zu ConcurrentModificationExceptions. Du musst also mit ListIterator.add(E) auskommen.

Ebenius
 

Loire

Mitglied
Das ist das du vergisst den zu überschreibenden Wert nicht zwischenspeicherst.
Daher wird der Wert auf Position previousIndex mit dem neuen Zufalls wert überschrieben.

Du müsstest hier zuerst alle folgenden Wert um eine Index Position nach hinten verschieben.
Und dann erst denn neuen Zufalls Wert an die Position einfügen.

Hallo, danke schonmal für die Antwort.
Hab ich dich richtig verstanden? theList.add(index, E) überschreibt den Wert an der Stelle Index anstelle ihn einzufügen?

@Ebenius
Dir auch danke für die Antwort. Ich hab mal probiert es mit der addfunktion von ListIterator umzuschreiben. Das sieht dann so aus:

Java:
	public void filltheList(){
		n = (int)(40.0*Math.random())+10;  // Zufallszahlen von 10-50
		int zufall;
		
		//wird n mal ausgeführt
		for(int index = 1; index <= n; index++){
			ListIterator<Integer> iterator = theList.listIterator(0); //iterator erzeugen
			zufall = intGenerator(); //Zufallswert erzeugen
			
//			solange bis wir am Ende der Liste sind oder wir einfügen können
			while((iterator.hasNext())&&(zufall>=iterator.next())){}			
			
//			Wenn der richtige Platz gefunden wurde einfügen
			if (iterator.hasNext()){ // mitten drin einfügen
				iterator.previous(); // Einen Schritt zurück
				iterator.add(zufall); // Element einfügen
			}
			else
				iterator.add(zufall); //am Ende einfügen
		}
	}

Und das letzte Ergebnis stimmt gelegentlich immer noch nicht :(
 
S

SlaterB

Gast
iterator.hasNext() nach der Schleife aufzurufen bringt wenig, da durch den next()-Aufruf verfälscht,
Credo: normalerweise immer previous aufrufen, nur dann nicht, wenn die while-Schleife wegen Ende abgebrochen wurde

Java:
        for (int index = 1; index <= n; index++)
        {
            ListIterator<Integer> iterator = theList.listIterator(0); // iterator erzeugen
            zufall = intGenerator(); // Zufallswert erzeugen

            // solange bis wir am Ende der Liste sind oder wir einfügen können
            boolean hasNext = true;
            while ((hasNext = iterator.hasNext()) && (zufall >= iterator.next()))   {    }
            if (hasNext)
            {
                iterator.previous();
            }
            iterator.add(zufall);
        }
 

dngfng

Aktives Mitglied
Bezüglich des überschreiben muss ich mich doch nochmal korrigieren habe noch mal in der API nachgelesen.

Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).

Apropo - du solltest dir auch mal die JAVA API zu Güte führen da diese die Funktionalitäten detailliere beschreibt.

Da hat SlaterB doch schon die Lösung parat.
 
Zuletzt bearbeitet:

Loire

Mitglied
@ SlaterB

Danke, darauf bin ich nicht gekommen.

@ dngfng

Okay, werd's mir nochmal genauer nachlesen.

Allen nochmal danke für die Hilfe =) Jetzt kann ich wieder ruhig schlafen :D
 

Eduard

Mitglied
Hallo zusammen, ich als Anfänger habe auch ein Problem mit Iterator und habe mir gedacht ich poste es hier.
meine aufgabe/problem ist: Die Notiz die suchbegriff enthält soll ausgegeben werden sonst "Keine...gefunden" ausgeben Die Methode gibt aber nur die Notiz mit suchbegriff aus. was fehlt bei dem Quellcode?
[Java]
public void notizSuchenMitIterator(String suchbegriff)
{
boolean hasNext = true;
Iterator<String> it= notizen.iterator();
while(it.hasNext())
{
String notiz = it.next();
if(notiz.contains(suchbegriff))
{

System.out.println(notiz);
break;
}
else
{

if(false)
{

System.out.println("Keine Notiz mit " + suchbegriff + " gefunden");
}
}
}
}
[/Java]
 
S

SlaterB

Gast
pro Jahr gibts doch sicher 400 Themen zu Iterator, kommen die jetzt alle hier rein?
wobei das diesmal gar nichts direkt mit Iterator zu tun hat
Java:
boolean gefunden = false;
Schleife {
 wenn irgendwas ausgegeben wird, dann auch gefunden auf true setzen
}
if (!gefunden) {
  System.out.println("Keine Notiz mit " + suchbegriff + " gefunden");
}
 

Eduard

Mitglied
es muss ein Iterator zum einsatz kommen.(Bedingung) und dieser muss im else - prüfen ob der Durchlauf schon am Ende der Notizliste ist , falls am Ende und keine Notiz mit suchbegriff gefunden, muss er "Keine ...gefunden" ausgeben. Meine Frage ist mittlerweile konkreter: wie sieht die Klammer im else( ? ) aus damit er die fehlermeldung ausspuckt?
 
S

SlaterB

Gast
die boolean Variable gefunden brauchst du in jedem Fall, auch wenn du das in der Schleife im else machst,
zusätzlich musst du noch abfragen, ob der Iterator zu Ende ist
 

Eduard

Mitglied
genau das; ich will wissen wie sieht es aus wenn ich überprüfe ob Iterator am Ende der Liste angekommen ist?
 

Eduard

Mitglied
habe jetzt eine lösung mit einer weiteren methode:
[Java]
public void notizSuchenMitIterator(String suchbegriff)
{
int anzahl=0;
boolean gefunden = false;
Iterator<String> it= notizen.iterator();
while(it.hasNext())
{
String notiz = it.next();
if(notiz.contains(suchbegriff))
{

System.out.println(notiz);
break;
}
else
{
anzahl++;
if(anzahl==anzahlNotizen())
{

System.out.println("Keine Notiz mit " + suchbegriff + " gefunden");
}
}
}
}
public int anzahlNotizen()
{

return notizen.size();
}
[/Java]
 
S

SlaterB

Gast
if(!it.hasNext()) kam dir nicht in den Sinn?
und ein weiteres mal: du darfst nicht immer am Ende diese Meldung ausgeben, boolean gefunden nutzen!
die muss natürlich auch gesetzt werden wenn was gefunden wurde..
 

Eduard

Mitglied
boolean und int anzahl habe ich gelöscht und if(!it.hasNext()) eingesetzt statt else Anweisung. es funktioniert. Jetzt gehts. Danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Problem mit Iterator Java Basics - Anfänger-Themen 2
W OOP problem mit iterator! -.- Java Basics - Anfänger-Themen 9
S iterator problem Java Basics - Anfänger-Themen 3
C Problem mit verschachteltem Iterator Java Basics - Anfänger-Themen 2
R Problem mit Iterator Java Basics - Anfänger-Themen 6
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben