Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Warum wartet Java nicht bis die for schleife zu ende ist
for(int i = 0; i < alleDatein.size(); i++) {
groesseArray = i + 1;
}
System.out.println("test");
System.out.println(groesseArray);
Ausgegeben komm ich :
2
test
1
test
3
Warum bekomm ich zwischenzeitlich schon das System.out.Print ausgegeben wohl die schleife noch nicht beendet ist?
wie bekomm ich java dazu das er das beenden der schleife abwartet?
Vielleicht steh ich gerade auch nur voll aufm schlauch ...
Ich vermute mal, dass er so schnell durch ist, dass er den Puffer (System.out) noch befüllte. Ist aber bei dem Code-Schnipsel auch schwierig zu sagen. Mir fällt so ein Verhalten meist dann auf, wenn ich System.out und System.err mische...
Ich vermute mal, dass er so schnell durch ist, dass er den Puffer (System.out) noch befüllte. Ist aber bei dem Code-Schnipsel auch schwierig zu sagen. Mir fällt so ein Verhalten meist dann auf, wenn ich System.out und System.err mische...
Jetzt tippe ich auf Stinknormale Rekursion: listeAlleDatein ruft sich auch selbst aus (was klar ist, wenn du den Dateibaum durchläufst), aber dadurch kommen eben auch die mehrfachen Ausgaben auf dei Konsole, denn listeAlleDatein ruft mehrdimensionalArrayerstellen auf, welche Wiederum *immer* die System.out-Calls macht.
Jetzt tippe ich auf Stinknormale Rekursion: listeAlleDatein ruft sich auch selbst aus (was klar ist, wenn du den Dateibaum durchläufst), aber dadurch kommen eben auch die mehrfachen Ausgaben auf dei Konsole, denn listeAlleDatein ruft mehrdimensionalArrayerstellen auf, welche Wiederum *immer* die System.out-Calls macht.
Sollte der Code net eigentlich nur solange die Rekursion ausführen bis keine If schleife zu zutrifft und DANACH erst danach wird die neue Methode aufgerufen
private String[][] listeAlleDatein(String cloudPfad) { [COLOR="Red"]2) Dann springta dahin und prüft ob das 1. oder 2. if zutrifft, wenn nicht dann macthta ab den Kommentar //ArrayList aufteilen weiter oder hab ich da schon an Denkfehler?[/COLOR]
File ordner = new File(cloudPfad);
File[] alles = ordner.listFiles();
ArrayList<String> alleDatein = new ArrayList<String>();
for (int i=0; i < alles.length; i++) {
if(alles[i].isDirectory()) {
listeAlleDatein(alles[i].getAbsolutePath()); [COLOR="Red"] 1) Hier ruf ich doch die rekursion auf[/COLOR]
}
if(alles[i].isFile()) {
String stringAlleDatein = alles[i].getAbsolutePath();
alleDatein.add(stringAlleDatein);
}
}
//ArrayList aufteilen
String[][]zweiDArray = mehrdimensionalArrayerstellen(alleDatein);
//Variablen und Arrays auf null setzen
ordner = null;
alles = null;
alleDatein.clear();
return zweiDArray;
}
private String[][] mehrdimensionalArrayerstellen(ArrayList<String> alleDatein) {
int groesseArray = 0;
for(int i = 0; i < alleDatein.size(); i++) {
groesseArray = i + 1;
}
System.out.println("test");
System.out.println(groesseArray);
String[] alleDateinArray = alleDatein.toArray(new String[alleDatein.size()]);
String[][] dateizweiDArray = new String [alleDateinArray.length][2];
for(int i=0; i < dateizweiDArray.length; i++) {
String dateiName = alleDateinArray[i].substring(alleDateinArray[i].lastIndexOf("\\") + 1);
dateizweiDArray[i][0] = dateiName;
dateizweiDArray[i][1] = alleDateinArray[i];
}
//Variablen und Arrays auf null setzen
alleDateinArray = null;
alleDatein.clear();
return dateizweiDArray;
}
}
Du rufst immer noch mehrdimensionalArrayerstellen innerhalb von listeAlleDatein auf. Rekursion ist nicht Paralellisierung, also werden Verzeichnisse immer noch sequentiell abgearbeitet. Kann also immer noch passieren (immer auf jeder Verzeichnis-Ebene).
vielleicht solltest du mal erklären, was deine schräge Matrix von Strings am Ende machen soll (ich hab gerade keinen Bock den Swing-Teil des Codes durchzulesen).
BTW: Erwarte heute keine Antworten mehr, ich mach jetzt heim...
Die Methode listeAlleDatein soll alle Datein aus dem und allen Unterordner auslesen und mehrdimensionalArrayerstellen soll hergehen soll die Pfade nochmal zerlegen in nen Dateiname und dann in einem 2D Array abspeichern und dann zurück an die Main übergeben werden, welche die listeAlleDatein aufgerufen hatte
Also:
- Man leitet nicht von JFrame ab, außer man ändert dessen Funktionalität
- Man schreibt Variablen, etc. in camelCase
- Man versucht alle Bezeichner (Klassen, Variablen, ...) in Englisch zu halten
- Man verwendet sprechende Namen für Bezeichner (z.B.: Methodennamen)
- Man soll Konstanten verwenden (wie z.B. Spaltennamen) und richtig deklarieren (public/private static final ...)
- Man soll die API verwenden (java.nio -> FileVisitor -> durch den Filetree wandern) -> vorausgesetzt Java 8
Also:
- Man leitet nicht von JFrame ab, außer man ändert dessen Funktionalität
- Man schreibt Variablen, etc. in camelCase
- Man versucht alle Bezeichner (Klassen, Variablen, ...) in Englisch zu halten
- Man verwendet sprechende Namen für Bezeichner (z.B.: Methodennamen)
- Man soll Konstanten verwenden (wie z.B. Spaltennamen) und richtig deklarieren (public/private static final ...)
- Man soll die API verwenden (java.nio -> FileVisitor -> durch den Filetree wandern) -> vorausgesetzt Java 8