Problem mit Schleifen

Naster

Mitglied
Hallo, ich habe ein kleines Problem mit Schleifen. In der Aufgabenstellung geht es darum, dass Polizisten Straftäter in einem Gefängnis suchen sollen. Zuvor wurden die Polizisten und Straftäter per Zufall im Gefängnis verteilt (keine Zelle ist doppelt besetzt).
Ich weiß, dass man das nachfolgende Problem mit Arrays einfacher und schneller Lösen kann. Es wird aber empfohlen, die Aufgabe aus Übungszwecken mit Schleifen zu bearbeiten.
Meine Überlegung war also nun folgende:
Java:
        double rows3 = 0;
        double columns3 = 0;
        int i = 0;
        int j = 0;
        for (int r = 0; r < x; r++) {
            for (i = 0; i < (2 * x); i++) {
                rows3 = prison.getActor(i).getRow();
                System.out.println(rows3);
                columns3 = prison.getActor(i).getCol();
                System.out.println(columns3);
                if (prison.getActor(i).getType() == Actor.Type.CRIMINAL) {
                    break;
                }
            }
            for (j = 0; j < (2 * x); j++) {
                if (prison.getActor(j).getType() == Actor.Type.POLICE) {
                    prison.getActor(j).moveTo((int) rows3, (int) columns3);
                    System.out.println(prison.getActor(j).getType());
                    break;

                }
            }
        }

Jetzt läuft aber nur ein Polizist zu einem Gefangenen, danach passiert nichts mehr.
Wenn ich die breaks weglasse, dann laufen alle Polizisten zu einem Gefangenen.
Ich weiß, dass ich den Schleifendurchlauf irgendwie ändern muss, komme aber einfach nicht drauf.

Wäre sehr nett, wenn mir jemand etwas auf die Sprünge helfen könnte.
 

Naster

Mitglied
Soweit ich weiß, wir bei break die Schleife abgebrochen und in den nächsten Bereich weitergesprungen.
x bekommt seine Wert durch eine vordefinierte Methode getNumberOfCriminals(). In diesem Fall 20.
 

Naster

Mitglied
Moin,

so richtig offen gestanden nicht, da mir
(a) die Aufgabenstellung nicht wirklich klar ist und
(b) noch 'ne Menge Infos fehlen (der komplette Code bspw., da es so ja nicht mal annähernd compilieren läßt) !

Vlt. liest Du Dir erst noch mal diesen Link durch: http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

VG Klaus

Java:
import gdi.escape.*;

public class PrisonEscape {
    public static void main(String[] args) {
        Prison prison = new Prison(args);
        prison.openDoors();
        int x = prison.getNumberOfCriminals();
        for (int a = 0; a < x; a++) {
            Actor policeman = new Actor(prison, Actor.Type.POLICE);
            double rows1 = prison.getNumberOfRows() * Prison.random();
            double columns1 = prison.getNumberOfColumns() * Prison.random();
            policeman.moveTo((int) rows1, (int) columns1);
        }
        prison.waitForActors();
        double rows2;
        double columns2;
        for (int a = 0; a < x; a++) {
            Actor criminal = new Actor(prison, Actor.Type.CRIMINAL);
            do {
                rows2 = prison.getNumberOfRows() * Prison.random();
                columns2 = prison.getNumberOfColumns() * Prison.random();
            } while (prison.isUnoccupied((int) rows2, (int) columns2) == false);
            criminal.moveTo((int) rows2, (int) columns2);
        }
        prison.waitForActors();
        double rows3 = 0;
        double columns3 = 0;
        int i = 0;
        int j = 0;
        for (int r = 0; r < x; r++) {
            do {
                while (i < (2 * x)) {
                    rows3 = prison.getActor(i).getRow();
                    System.out.println(rows3);
                    columns3 = prison.getActor(i).getCol();
                    System.out.println(columns3);
                }
            } while (prison.getActor(i).getType() == Actor.Type.POLICE);
            do {
                for (j = 0; j < (2 * x); j++) {
                }
            } while (prison.getActor(j).getType() == Actor.Type.CRIMINAL);
            prison.getActor(j).moveTo((int) rows3, (int) columns3);
        }
    }
}

Hier ist der Teil wichtige Teil der Aufgabenstellung: Ich hänge jetzt quasi bei Punkt 12:
Als Nächstes sollen die Polizei-Figuren (engl. police) platziert werden, um einen drohenden Gefängnisausbruch zu verhindern.
Die Anzahl der zu platzierenden Polizisten hängt von der Anzahl Gefangener ab und soll dynamisch über die Methode getNumberOfCriminals () der
Prison-Klasse bestimmt werden.
Jeder Polizist soll zufällig auf einem Feld platziert werden. Es dürfen (vorerst) mehrere Polizisten aufeinem Feld stehen.
• Verwenden Sie Prison.random() (und nicht Math.random()), um zufällig ein Feld zu bestimmen.
Stellen Sie sicher, dass mit dem eingebauten Zufall jedes Feld besetzt werden kann und nicht manche Felder unerreichbar sind. Die Größe des Gefängnisses ist dynamisch und kann über entsprechende Methodenaufrufe abgefragt werden.
7. Testen Sie, ob sich Ihr Programm wie erwartet verhält alt.
8. Nachdem alle Polizisten verteilt wurden, soll gewartet werden, bis alle
Figuren an ihren Platz gelaufen sind. Verwenden Sie dazu eine passende Methode aus der Prison-Klasse.
9. Nun sollen die Verbrecher (engl. criminals) ausbrechen.
Es müssen genauso viele Verbrecher wie Polizisten platziert werden.
Jeder Verbrecher soll zufällig auf einem unbesetzten Feld platziert werden. Verbrecher sollen also immer alleine auf einem Feld stehen.
Verwenden Sie erneut Prison.random()
(und nicht Math.random()), um zufällig ein Feld zu bestimmen. Stellen Sie auch hier sicher, dass kein Feld unerreichbar ist.
10. Testen Sie erneut, ob sich Ihr Programm wie erwartet verhält.
11. Nachdem alle Verbrecher verteilt wurden, soll erneut gewartet werden, bis alle Figuren an ihren Platz gelaufen sind.
12. Nun soll sich jeder Polizist einen Verbrecher suchen und zu dessen Feld laufen.
Jeder Polizist soll genau einen Verbrecher-Partner haben (und umgekehrt).
Die Verbrecher sollen ihre Position nicht verändern.
 
Zuletzt bearbeitet:

Salzzy

Mitglied
Dann nimmst von jedem Verbrecher die Zelle und übergibst diese einem Polizisten und somit hast für jeden Cop ein Bösewicht zugeordnet.
 

Naster

Mitglied
Dann nimmst von jedem Verbrecher die Zelle und übergibst diese einem Polizisten und somit hast für jeden Cop ein Bösewicht zugeordnet.

Ja das ist ja auch meine Überlegung gewesen,aber ich kriegs mit den verschachtelten Schleifen irgendwie nicht hin. Das ist ja mein Problem. Der Ansatz, wie ich zum Ziel komme ist mir klar...
 

Salzzy

Mitglied
Hast du nur die Methode getActors() und musst die dann Vergleichen oder geht auch criminal() und police() um diese Aufzurufen? Weil sonst würde das ganz einfach mit einer gehen:
Code:
for(int i = 0; i <= anzahl.Verbecher; i++){
  
    spalte = criminal(i).getspalte();
    zeile = criminal(i).getzeile();
  
    police(i).moveto(spalte, zeile);

}
 

Naster

Mitglied
Hast du nur die Methode getActors() und musst die dann Vergleichen oder geht auch criminal() und police() um diese Aufzurufen? Weil sonst würde das ganz einfach mit einer gehen:
Code:
for(int i = 0; i <= anzahl.Verbecher; i++){
 
    spalte = criminal(i).getspalte();
    zeile = criminal(i).getzeile();
 
    police(i).moveto(spalte, zeile);

}
Ich habe nur die Methode getActors().
Darum wäre meine Überlegung so gewesen:
Ich Prüfe mit einer Schleife solange die Zahlen durch (getActors(i);) bis ich einen Gefangenen finde. Von dem hol ich mir dann seinen Standort (getRow();, getCol();). Jetzt muss ich also aus allen Actors noch einen Polizisten finden (getActors(j);). Sobald ich einen habe, schicke ich den über die moveTo() Methode zu dem Gefangenen. Im Anschluss muss ich den ganzen Prozess also jetzt noch so oft machen bis alle Polizisten bei einem Gefangenen stehen. Da es genau so viele Gefangene wie Polizisten gibt, würd ich das über die for-Schleife machen (r < 0.5 * x)
 

Salzzy

Mitglied
Okay also Überprüf nochmal ob das mit deinen Methoden übereinstimmt:
Code:
double zeile = 0;
double spalte = 0;
int counterPolice = 0;

for(int i = 0; i <= prison.getActors(); i++){
   
    if(prison.getActors(i).getType() == Actor.Type.CRIMINAL){
       
        zeile = prison.getActor(i).getRow();
        spalte = prison.getActor(i).getColumn();
       
        for(int j = counterPolice; j <= prison.getActors(); j++){
           
            if(prison.getActors(j).getType() == Actor.Type.POLICE){
               
                prison.getActor(j).moveTo((int) zeile, (int) spalte);
                counterPolice = j;
                break;
            }
           
        }
       
    }
   
}
 

Naster

Mitglied
Okay also Überprüf nochmal ob das mit deinen Methoden übereinstimmt:
Code:
double zeile = 0;
double spalte = 0;
int counterPolice = 0;

for(int i = 0; i <= prison.getActors(); i++){
  
    if(prison.getActors(i).getType() == Actor.Type.CRIMINAL){
      
        zeile = prison.getActor(i).getRow();
        spalte = prison.getActor(i).getColumn();
      
        for(int j = counterPolice; j <= prison.getActors(); j++){
          
            if(prison.getActors(j).getType() == Actor.Type.POLICE){
              
                prison.getActor(j).moveTo((int) zeile, (int) spalte);
                counterPolice = j;
                break;
            }
          
        }
      
    }
  
}

Ich hab deinen Code jetzt angepasst. Leider läuft aber nur ein Polizist zu einem Gefangenen. Danach passiert nichts mehr...
Java:
double rows3;
        double columns3;
        int counterPolice = 0;
       
            for (int i = 0; i < (2 * x); i++) {

                if (prison.getActor(i).getType() == Actor.Type.CRIMINAL) {

                    rows3 = prison.getActor(i).getRow();
                    columns3 = prison.getActor(i).getCol();

                    for (int j = counterPolice; j < (2 * x); j++) {

                        if (prison.getActor(j).getType() == Actor.Type.POLICE) {

                            prison.getActor(j).moveTo((int) rows3, (int) columns3);
                            counterPolice = j;
                            break;
                        }
                    }

                }

            }
 

Salzzy

Mitglied
Ich hab deinen Code jetzt angepasst. Leider läuft aber nur ein Polizist zu einem Gefangenen. Danach passiert nichts mehr...
Java:
double rows3;
        double columns3;
        int counterPolice = 0;
     
            for (int i = 0; i < (2 * x); i++) {

                if (prison.getActor(i).getType() == Actor.Type.CRIMINAL) {

                    rows3 = prison.getActor(i).getRow();
                    columns3 = prison.getActor(i).getCol();

                    for (int j = counterPolice; j < (2 * x); j++) {

                        if (prison.getActor(j).getType() == Actor.Type.POLICE) {

                            prison.getActor(j).moveTo((int) rows3, (int) columns3);
                            counterPolice = j;
                            break;
                        }
                    }

                }

            }
Weil du die Schleifen köpfe wieder verändert hast funktioniert es nicht(Würde das auch mit meinen Schleifenköpfen funktionieren?). "x" sind doch nur die Anzahl von Kriminellen und die nimmst du mal zwei also haben wir im Endeffekt 60 kriminelle durch die die Schleife läuft und unter den Kriminellen kann doch auch kein Polizist gefunden werden oder sehe ich das Falsch ?
 

Naster

Mitglied
Weil du die Schleifen köpfe wieder verändert hast funktioniert es nicht(Würde das auch mit meinen Schleifenköpfen funktionieren?). "x" sind doch nur die Anzahl von Kriminellen und die nimmst du mal zwei also haben wir im Endeffekt 60 kriminelle durch die die Schleife läuft und unter den Kriminellen kann doch auch kein Polizist gefunden werden oder sehe ich das Falsch ?

Nein.
Java:
int x = prison.getNumberOfCriminals();
"x" bekommt den Wert durch diese Methode zugewiesen. Wie du in der Aufgabenstellung siehst, müssen genausoviele Polizisten wie Kriminelle im Gefängnis sein. Also ist die Gesamte Anzahl an Actors im Gefängnis "2 * x". X bekommt einfach nur einen int Zahlenwert ohne weitere Angaben.
Beide Schleifen sollen ja durch alle Actors durchlaufen, weil ich nicht weiß, welche Zahl dem jeweiligen Actor zugeteilt wurde. Daran kann es also meiner Meinung nach nicht liegen.
 

Naster

Mitglied
Ich habe gerade Mal mit einem System.out.println die Werte von i und j ausgegeben. Was komisch ist, ist dass j immer den Wert 0 bekommt...Da wird wohl der Fehler liegen. Aber was muss ich da ändern?
 

Anhänge

  • prison.PNG
    prison.PNG
    73,3 KB · Aufrufe: 35

Salzzy

Mitglied
Das kann aber eigentlich nicht sein :D
Versuch mal
Code:
counterPolice = j + 1;
zu setzen und guck was dann passiert
 

Salzzy

Mitglied
Warum das so ist kann ich dir gerade auch nicht verraten... Man könnte höchstens genauer auf Fehlersuche gehen, indem wir im Schleifenkopf "j + 1" setzen statt "counterPolice = j + 1" und schauen was passiert. Deswegen meinte ich ja es müsste auch so gehen, weil es genau das selbe ist. Es kann viele Gründe haben(irgendeine Methode setzt j wieder 0), denn so auf Anhieb kann ich keinen Fehler in dem Code erkennen, der das j wieder auf 0 setzt.
 

Naster

Mitglied
Ok, naja wenn ich bei anderen Projekten ein ähnliches Problem habe, dann weiß ich ja jetzt einen möglichen Lösungsansatz. Nochmal danke.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Schleifen Problem Java Basics - Anfänger-Themen 2
C Erste Schritte While-Schleifen-Problem Java Basics - Anfänger-Themen 3
S for-Schleifen Problem Java Basics - Anfänger-Themen 4
X Methoden Logik-Problem mit Schleifen. Java Basics - Anfänger-Themen 7
N Schleifen Problem Java Basics - Anfänger-Themen 3
N Schleifen problem Java Basics - Anfänger-Themen 17
H Kleines Problem bei den Schleifen Java Basics - Anfänger-Themen 5
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
N Input/Output Schleifen - Ausgabe Problem Java Basics - Anfänger-Themen 2
M Schleifen-Problem Java Basics - Anfänger-Themen 7
A OOP Arraybefüllung mit for-Schleifen Problem: Umsprung in die zweite Zeile Java Basics - Anfänger-Themen 11
S Problem mit while-Schleifen Java Basics - Anfänger-Themen 6
S Problem bei Schleifen Java Basics - Anfänger-Themen 4
J Schleifen-Problem mit Arrays Java Basics - Anfänger-Themen 8
A Problem mit for Schleifen und Zeichnen HILFE!!! Java Basics - Anfänger-Themen 6
P while schleifen problem Java Basics - Anfänger-Themen 14
A Mitternachtsformel. Problem mit if Schleifen (Glaub ich). Java Basics - Anfänger-Themen 16
S Problem mit schleifen Java Basics - Anfänger-Themen 2
B Problem bei for Schleifen Java Basics - Anfänger-Themen 5
C Schleifen-Problem Java Basics - Anfänger-Themen 6
N Problem mit Schleifen-Durchlauf Java Basics - Anfänger-Themen 2
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
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

Ähnliche Java Themen

Neue Themen


Oben