Zweifache For-Schleife

FawKes100

Aktives Mitglied
Moin,
hab ein kleines Problem. Ich möchte ein Programm schreiben, welches die Pixelfarben in einem Bildschirmbereich abfragt. Es gibt von der Klasse Robot dien Methode robot.getPixelColor(int x, int y)
Nun habe ich folgende Methode geschrieben, um die Pixelfarbe direkt in RGB-Daten zu zerlegen:
Java:
 public void readFromScreen(int x, int y, int breite, int hoehe)
    {
        ArrayList<Integer> red = new ArrayList<>();
        ArrayList<Integer> green = new ArrayList<>();
        ArrayList<Integer> blue = new ArrayList<>();
        ArrayList<Integer> xPos = new ArrayList<>();
        ArrayList<String> lines = new ArrayList<>();
        for(int i=y; i<y+hoehe; i++)
        {
           for(int j=x; j<x+breite; j++)
           {
               Color screenColor = robot.getPixelColor(j,i);
               red.add(screenColor.getRed());
               green.add(screenColor.getGreen());
               blue.add(screenColor.getBlue());
               xPos.add(j);
           }
           lines.add(buildString(xPos,y,red,green,blue));
        }
        writeStringArray(lines, blenderMenue);
}
Allerdings ist es nun so, dass wenn ich in die Datei schaue, die Zeilen unterschiedlich lang ist, obwohl es ein Rechteck sein sollte und somit die Länge der Pixelreihen die abgefragt werden immer gleich lang sein müsste...
Die Koordinaten wo er anfängt sind jeweils:
x = 240;
y= 27;
breite = 32;
hoehe = 19;
Hat jemand ne Erklärung für das Problem und wie ich das beheben könnte?
Vielen Dank für jede Antwort im Voraus ;)
Fawkes
 

httpdigest

Top Contributor
Was meinst du mit "unterschiedlich lang" und was meinst du mit "Zeilen" und welche "Datei" meinst du? Nichts davon wird aus deinem Code ersichtlich.
Das einzige was dein Code macht ist, ArrayLists zu befüllen und die unbekannten Methoden "buildString" und "writeStringArray" aufzurufen. Keine kann sagen, was hier passiert.
Falls du die Zahlen, die du in die ArrayLists schreibst, wirklich als Zahlen/Strings in die Datei ausgibst, dann erscheinen die Zeilen natürlich als unterschiedlich lang, da die Zahl "2" als Text weniger Zeichen einnimmt als die Zahl "255".

Aber dein eigentliches Problem wird wahrscheinlich sein, dass du die ArrayLists nicht mittels ArrayList.clear() leerst, bevor du mit der nächsten Zeile anfängst. Somit enthält jede Zeile `i` vermutlich auch die Daten aus den vorherigen Zeilen `0..i-1`.
 

FawKes100

Aktives Mitglied
Vielen Dank noch einmal für deine schnelle Antwort. Das ich die Array-Listen wieder löschen muss erscheint sinnvoll.
Allerdings erhalte ich nun eine komplett leere Textdatei, sobald ich die Arraylisten lösche...
Lösche ich die evtl an der falschen Stelle? Aber der String müsste eigentlich schon gebildet worden sein und die Arraylist "lines" lösche ich ja nicht...
Hier nu einmal den Code der Methode, die die Pixel abfragt und in Array-Listen speichert:
Java:
 public void readFromScreen(int x, int y, int breite, int hoehe)
    {
        ArrayList<Integer> red = new ArrayList<>();
        ArrayList<Integer> green = new ArrayList<>();
        ArrayList<Integer> blue = new ArrayList<>();
        ArrayList<Integer> xPos = new ArrayList<>();
        ArrayList<String> lines = new ArrayList<>();
        for(int i=y; i<y+hoehe; i++)
        {
            for(int j=x; j<x+breite; j++)
            {
                Color screenColor = robot.getPixelColor(j,i);
                red.add(screenColor.getRed());
                green.add(screenColor.getGreen());
                blue.add(screenColor.getBlue());
                xPos.add(j);
            }
            lines.add(buildString(xPos,y,red,green,blue));

            green.clear();
            blue.clear();
            xPos.clear();
        }
        robot.mouseMove(x,y);
        writeStringArray(lines, blenderMenue);
    }
Die Methode "buildString" baut den String auf, der später abgespeichert werden soll:
Java:
 private String buildString(ArrayList<Integer> xPos, int y, ArrayList<Integer> red, ArrayList<Integer> green, ArrayList<Integer> blue)
    {
        String line ="";
        for(int i=0; i<xPos.size(); i++)
        {
            line+= xPos.get(i) + ";" + y + ";" + red.get(i) + ";" + green.get(i)+ ";" + blue.get(i) + "-";
        }
        return line;
    }
Und in der Methode "writeStringArray" wird der String nun in einer Textdatei abgespeichert:
Java:
 private void writeStringArray(ArrayList<String> lines , File file)
    {
        String LineSeparator = System.getProperty("line.separator");
        try
        {
            FileWriter fileWriter = new FileWriter(file);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            for(int i=0; i<lines.size(); i++)
            {
                bufferedWriter.write(lines.get(i) + LineSeparator);
            }
        }catch(IOException e)
        {
            System.out.println("Hier läuft was schief");
            e.printStackTrace();
        }
    }
 

FawKes100

Aktives Mitglied
Okay, wie ich nun durch ein paar Konsolenausgaben feststellen konnte, liegt es nicht an den Arraylisten das nichts reingeschrieben wird, sondern an der Methode des Schreibens. Hier lasse ich vorher mittels
Code:
System.out.println(lines.get(i));
den Inhalt des String der in die Datei geschrieben werden soll in die Konsole ausgeben. Und hier schreibt er was rein, nur nicht in die Datei. Irgendwelche Ideen?
 

Robat

Top Contributor
Wahrscheinlich muss am Ende noch bufferedWriter.flush() aufgerufen werden, oder?
BTW: Wenn du fertig bist solltest du den BufferedWriter wieder schließen.
 

FawKes100

Aktives Mitglied
Danke für den Hinweis. Habe jetzt sowohl
Java:
bufferedwriter.close()
als auch
Java:
filewriter.close()
angehängt und nun wird alles in die Textdatei geschrieben. Vielen Dank für die Hilfe!
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn du stattdessen mit try-with-resources arbeitest, wird das schließen automatisch (und auch im Fehlerfall) gemacht ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
A For-Schleife Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
1 Klassen Variabel aus Schleife übergeben Allgemeine Java-Themen 8
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
D While-Schleife - if Zweig unterbrechen Allgemeine Java-Themen 1
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
T for - Schleife Allgemeine Java-Themen 1
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
R Komplizierte Schleife Allgemeine Java-Themen 1
Q For-Schleife in String-Value Allgemeine Java-Themen 3
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F for-Schleife auf Kommandoebene ausgeben Allgemeine Java-Themen 9
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
P Erweiterte For Schleife Allgemeine Java-Themen 7
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
Y automatisierte for Schleife Allgemeine Java-Themen 13
B For schleife und weiter? Allgemeine Java-Themen 8
D Probleme bei for-Schleife Allgemeine Java-Themen 4
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
N Frage zur while-Schleife Allgemeine Java-Themen 18
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
M PdfPTable per for-Schleife befüllen Allgemeine Java-Themen 3
F for-Schleife mit : Allgemeine Java-Themen 5
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
F Foreach und for - Schleife Allgemeine Java-Themen 10
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
S for-Schleife, while-Schleife Problem Allgemeine Java-Themen 6
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
R while schleife auf 3 durchgänge beschränken Allgemeine Java-Themen 6
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
x22 for-Schleife Allgemeine Java-Themen 76
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
J Schleife mit : Allgemeine Java-Themen 18
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
E Schleife wird nicht ausgeführt!!! Allgemeine Java-Themen 8
C Schleife mit leerem Anweisungsblock wird trotz erfüllter Bedingung nicht verlassen Allgemeine Java-Themen 9
S Do-While Schleife bricht nicht ab Allgemeine Java-Themen 3
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
K CheckBox schleife Allgemeine Java-Themen 2
D Methoden Thread Schleife Status Allgemeine Java-Themen 7
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
R In einer for Schleife bei einem Substring anfangen, wo man davor aufgehört hat Allgemeine Java-Themen 6
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
hdi Detail-Frage zur for-Schleife Allgemeine Java-Themen 9
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
C Geschachtelte For-Schleife: Äußere Schleife wird nur einmal durchlaufen!? Allgemeine Java-Themen 3
W While-ESC-Schleife funktioniert nicht Allgemeine Java-Themen 3
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
H Threads.... ich will aus der While-Schleife raus Allgemeine Java-Themen 6
calzone Warum wird nicht aus der Schleife gesprungen ? Allgemeine Java-Themen 2
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
S Wie gross ist die Laufzeit für diese Schleife?? Allgemeine Java-Themen 8
J Schachbrett mit for- oder while-Schleife Allgemeine Java-Themen 22
I For- Schleife falsch? Allgemeine Java-Themen 8
T Schleife kurzzeitig anhalten Allgemeine Java-Themen 5
V Problem in While-Schleife Allgemeine Java-Themen 3
Escorter Switch in der Schleife! Allgemeine Java-Themen 4
C Auswertung der for each schleife? Allgemeine Java-Themen 2
GilbertGrape foreach Schleife Allgemeine Java-Themen 12
J FOR-Schleife-Problem Allgemeine Java-Themen 10
G Schleife durch Button beenden Allgemeine Java-Themen 6
S Schleife funktioniert nicht Allgemeine Java-Themen 2
G Anonymen Buttons in for schleife ActionListener hinzufügen Allgemeine Java-Themen 5
T getParameter in while schleife Allgemeine Java-Themen 3
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
R array.length in For-Schleife verwenden? Allgemeine Java-Themen 22
V Schleife funktioniert nicht wie gewünscht Allgemeine Java-Themen 5
T Schleife im Konstruktor? Allgemeine Java-Themen 9
S Schleife mit Durchlaufrate Allgemeine Java-Themen 5
R Per for schleife string propertys in einer datei speichern Allgemeine Java-Themen 15
H In Testklasse Objekte erzeugen und in einer Schleife ausgebe Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben