logischen Fehler finden

Status
Nicht offen für weitere Antworten.

beginner99

Aktives Mitglied
Hallo zusammen,

habe etwas komischen entdeckt, zumndest für mich Anfänger. Als Aufgabe müssen wir eine Simulation bearbeiten. Gewisse Teile (Klassen) der Simulation sind schon gegeben und es geht darum sie zu erweitern oder zu verändern.

Die Simulation sieht dann wie folgt aus:

Java:
    public void run(int numberOfTurns, int waitBetweenTurns)
    {
        for(int i = 0; i < numberOfTurns; i++){
            step++;
            step();
            wait(waitBetweenTurns);
        }
        
        printResults();        
    }

Das wait war schon da und der grund ist die Darstellung der Simulation. Ohne Pause sieht man also eighentlich nichts. Macht zack und vorbei ist die Simulation.

Der einzelene Schritt:

Java:
    public void step()
    {
        for(Actor actor : actors) {
            actor.act();
        }
    }

Hier passiert viel mit linkedlisten wie Iterieren, hinzufügen und entfernen. LinkedlIst weil ich die Listen als Queue brauche.(Allerdings nicht unbedingt als FIFO Queue). Neue Elemente könnnen auch irgendwo in der mitte eingeführt werden. Es ist eine Liste mit Orten (Ort = Koordinaten auf einem grid). Der nächste Ort zur aktuellen position ist dann jeweils an erster Stelle, ein neuer ort wird entsprechend seiner Distanz zum aktuellen ort eingeführt.
(Ka ob das überhaupt relevant ist für das Problem, auf jedenfall passiert viel mit Listen).

Das Problem:

Ein bestimmter actor verursacht in seiner act-methode gelegentlich eine NoSuchElementException bei list.removeFirst(). Das Problem ist mir erst aufgefallen, als ich im Simulator eine Methode eingeführt habe ohne wait und ohne gui, die 100 Simulationen a 500 Schritten aufs mal durchführt und paar mittelwerte berechnet. Der Fehler tritt also selten auf, zum teil gar nie pro 100 Simulationen a 500 Schritten(auch mehrere male hintereinander nicht). Vom betroffenen actor gibt es 2 instanzen.

Hab das ganze auch per Papier durchgespielt und es sollte funktionieren, eg. ich sehe nicht ein wieso die List plötzlich kein Element mehr hat. Es ist richtig, dass ich vor der Methode keine Prüfung habe, aber die Prüfung braucht es theoretisch nicht, denn wenn die Liste an der Stelle leer ist, ist sowieso was falsch, logischer Fehler bei gewissen seltenen Situationen.


Die Frage ist es, wie man da vorgeht, um den Fehler zu finden.
 

Michael...

Top Contributor
Die Frage ist es, wie man da vorgeht, um den Fehler zu finden.
Konkret zu Deinem Problem kann ich aufgrund des wenigen Codes nicht sagen.
Allgemein kann man in dem Umfeld in dem der Fehler auftritt bzw. in dem man einen Fehler vermutet mal verschiedene Informationen per System.out (z.B. Listengröße/ Listeninhalt bevor man removeFirst() aufruft) ausgeben, um zu überprüfen ob die Objekte tatsächlich den Zustand haben, den man erwartet.
 

Ark

Top Contributor
Arbeitet die Simulation mit mehreren Threads? Wenn ja, könnte es Probleme wegen asynchroner Zugriffe geben. Ansonsten werden wir wohl mehr Code benötigen, um einen Fehler festzustellen zu können.

Ark
 

beginner99

Aktives Mitglied
Arbeitet die Simulation mit mehreren Threads? Wenn ja, könnte es Probleme wegen asynchroner Zugriffe geben. Ansonsten werden wir wohl mehr Code benötigen, um einen Fehler festzustellen zu können.

Ark

Nein, ist single Threaded.


Allgemein kann man in dem Umfeld in dem der Fehler auftritt bzw. in dem man einen Fehler vermutet mal verschiedene Informationen per System.out (z.B. Listengröße/ Listeninhalt bevor man removeFirst() aufruft) ausgeben, um zu überprüfen ob die Objekte tatsächlich den Zustand haben, den man erwartet.

Hab ich probiert, aber es ist nicht wirklich ersichtlich wieso er auftritt.

Es geht um eine "Verkehrssimulation" und in diesem Fall um einen Art "Bus". Der Simulator erstellt Passagiere, dann wird entschieden, welcher Bus den passagier abholt (eg. kein Linienbus) und der Passagier wird dem bus zugewiesen. Passagiere haben einen Start und Ziel Ort. Der Bus hat eine Liste mit allen Passagieren im Bus und allen Orten, die er anfahren muss. Ob es ein Start oder Zielort ist, wird entschieden, wenn der Bus ankommt (es kann ja auch beides sein). Alles nicht ganz trivial, logisch betrachtet. Hier mal ein teil des codes der Bus Klasse:

Java:
    public void act()
    {  
		// Ort, den der Bus momentan ansteuert
		// wenn null, dann ist er leer und hat keine Abholaufträge
        Location target = getTargetLocation();
        if(target != null) {
            // Find where to move to next.
            Location next = getLocation().nextLocation(target);           
            
            setLocation(next);
			// für stats
            increaseTotalDistance();
			
			// falls next = Zielort, muss der Bus einen Passagier
			// aufnehmen oder abladen
            if(next.equals(target)) {  
               
//                if (destinations.size() < 1){
//                    
//                     System.out.println(getQueueSize());
//                     System.out.println(passengers.size());
//                } 
                //hier passiert der Fehler

				//Wenn man den restlichen Code anschaut,
				// versteht man dann ev. wieso hier immer ein Element
				// in der Liste sein sollte.
                destinations.removeFirst();
                 
				// abladen
                if (isDestinaton(next)) {                   
                    
                    passengerToRemove = getPassengerToOffload(next);
                    notifyPassengerArrival(passengerToRemove);
                    offloadPassenger();                    
                }
				//aufnehmen
               if (isPickUpLocation(next)) {  
                   
                    Passenger newPassenger = getPassengerToPickup(next);
                    notifyPickupArrival(newPassenger);
                    pickup(newPassenger);                    
                } 
            }
        }
        else {
			// stats
            incrementIdleCount();
        }
		
	/**
     * Add a new assignment to the PickupQueue.
	 * 	
	 * Processes new pickup requests
     */
    public void addAssignment(Passenger passenger){      
        
		// sozusagen der einstiegspunkt
		// hier werden die neuen Aufträge verarbeitet
		// ein ort wird auch zugeführt
        addToQueue(passenger);
        chooseTargetLocation(passenger.getPickupLocation());
    }
	
	/**
     * Pickup a passenger.
     * Add his destination to the list.
	 
     * @param passenger The passenger to pickup.
     */
    public void pickup(Passenger passenger)
    {   
		// fügt den zielort zur der AnfahrtsOrtListe hinzu
		// und entscheided welcher ort als nächster angefahren
		// wir. (= der der am nächsten ist)
        chooseTargetLocation(passenger.getDestination());
        passengers.add(passenger);
		// Queue = Liste der Passagier, die abgeholt werden müssen
        removeFromQueue(passenger);
		
		// Da wir einen neuen Passagier aufgenommen haben, werden wir
		// einen Ort haben, der als nächster angefahren werden soll.
		// ist ort = null -> IllegalArguemntException in "chooseTargetLocation".
    }
	
	/**
     * Offload a passenger whose destination is the
     * current location.
     */
    public void offloadPassenger()    
    {
		
        passengers.remove(passengerToRemove);
        passengerToRemove = null;
        
        if (destinations.size() > 0) {
			// da wir nur einen Passagier abladen
			// ändert sich nichts an der AnfahrtsOrtListe
			// -> einfach erstes Element nehmen, es ist
			// der Ort der am nächsten ist.
			// dies wir immer in chooseTargetLocation festgelegt.
            setTargetLocation(destinations.getFirst());
        }
		// Zielort Liste ist leer -> auf neuen Auftrag warten
        else
        {
            clearTargetLocation();
        }
    }
 
Zuletzt bearbeitet:

beginner99

Aktives Mitglied
Hab eigentlich extra wenig code gepostet, weil ich vermutet habe, dass anschliessend niemand mehr antwortet. oder:

*bump*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Fehler: <ID> erwartet Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
Pinhg Discord JDA Bot - Fehler Allgemeine Java-Themen 3
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
L Fehler mit Boolean. (Glaube ich zumindest) Allgemeine Java-Themen 6
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
O Fehler bei Variablen Allgemeine Java-Themen 2
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
C Fehler bei der Benutzung von itextpdf Allgemeine Java-Themen 1
U Fehler beim Compillieren Allgemeine Java-Themen 13
x46 String Format Fehler Allgemeine Java-Themen 2
bueseb84 Fehler beim Import von Maven Dependencies aus lokalem artifactory Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Fehler bei IF abfrage Allgemeine Java-Themen 8
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
M Einheitenrechner - Fehler Allgemeine Java-Themen 12
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Denk-Fehler? Allgemeine Java-Themen 4
A Finde den Fehler nicht. Allgemeine Java-Themen 7
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
D Unbekannter Fehler Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
I Fehler beim Ant-Package erstellen mit Java 9 Allgemeine Java-Themen 1
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
T OOP Fehler im Design Allgemeine Java-Themen 9
Thallius Unfassbarer Fehler. Brauche Ideen zum Debuggen Allgemeine Java-Themen 9
U Eclipse MANIFEST fehler Allgemeine Java-Themen 7
I Fehler bei HashMaps Darstellung Allgemeine Java-Themen 10
R Classnotfoundexception Fehler Allgemeine Java-Themen 3
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
N Prim's Algorithm - wo ist der Fehler? Allgemeine Java-Themen 3
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
M Line-Fehler Allgemeine Java-Themen 8
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
RalleYTN Merkwürdiger Fehler mit JFrame im Vollbild Allgemeine Java-Themen 4
V AudioInputStream Fehler Allgemeine Java-Themen 1
J Interpreter-Fehler Fehler beim Verschlüsseln Invalid AES key length Allgemeine Java-Themen 1
G Fehler mit Vector Allgemeine Java-Themen 3
F Java Fehler "buildTableModel" Allgemeine Java-Themen 3
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
DanielsLPecke Input/Output Arduino komischer Fehler. Allgemeine Java-Themen 38
V JavaFX Fehler beim Starten einer Jar Allgemeine Java-Themen 7
S Hashtable Fehler Allgemeine Java-Themen 14
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
K Was ist mein Fehler? Allgemeine Java-Themen 2
Tausendsassa Compiler-Fehler Fertiges Programm mit Fehler Allgemeine Java-Themen 10
B Eclipse Nach Export einer .jar Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 5
K Fehler beim erstellen von .jar Datei Allgemeine Java-Themen 3
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Eclipse - Fehler: Hauptklasse de.xyz.init.MeineKlasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 2
Seikuassi Swing Stehe auf dem Schlauch...(BufferedReader_Writer-Fehler?) Allgemeine Java-Themen 4
M Eclipse Fehler beim Installieren des Plugins "Jigloo" Allgemeine Java-Themen 12
A Eclipse - Fehler beim "RUN" - "Unable to Launch - The selection cannot be launched" Allgemeine Java-Themen 6
B Fehler bei einem Programm Allgemeine Java-Themen 10
F HILFEEEEEE JAVA Fehler - Tiny Umbrella Allgemeine Java-Themen 1
N JavaFX IndexOutOfBounds-Fehler Allgemeine Java-Themen 11
N GPIB - Fehler: Unable to open device Allgemeine Java-Themen 1
S Ganzes Programm "stucked" - JVM-Fehler? Allgemeine Java-Themen 2
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
B Eclipse Fehler in eclipse/Java Allgemeine Java-Themen 13
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
J Fehler beim parsens eine Datums Allgemeine Java-Themen 3
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
J Compiler-Fehler .nextLine fehler Allgemeine Java-Themen 3
B Fehler im Java-Code Allgemeine Java-Themen 4
S Java Fehler bei Konsolenprogramm Allgemeine Java-Themen 2
N Was ist ein Fehler (Requirement-Engineering) Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
T Programm bleibt ohne Fehler stehen Allgemeine Java-Themen 4
G Fehler beim instanzieren einer Generischen Klasse Allgemeine Java-Themen 5
K Eclipse Fehler beim Ausführen meines Programms in Eclipse Allgemeine Java-Themen 11
K Input/Output Fehler bei Dateierzeugung Allgemeine Java-Themen 7
M Fehler bei Remoteinstallation von Java Allgemeine Java-Themen 5
M Fehler bei Verwendung von TexturePaint Allgemeine Java-Themen 16
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
G Merkwürdiger Fehler NetBeans Allgemeine Java-Themen 2
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
P java tabelle auslesen - xls (excel) fehler Allgemeine Java-Themen 5
iB0T Unverständlicher Fehler Allgemeine Java-Themen 5
S Antlr Grammatik übersetzt ohne Fehler, dennoch wird Zahl nicht als Eingabe erkannt Allgemeine Java-Themen 4
S Fehler mit JScrollPane Allgemeine Java-Themen 4
K SimpleDateFormat Fehler Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben