Ich zerbreche mit den kopf an einer Aufgabe

Neuling47

Aktives Mitglied
Hallo zusammen meine Aufgaben ist:
Eine Methode, die die Werte eines zweidimensionalen double-Arrays (zeilenweise) als Zahlen in eine csv-Datei schreibt.
mein code lautet:
Java:
import java.io.File;
import java.io.FileWriter;

public class double2DArray {

    public static void main(String[] args) {
        FileWriter writer;
        File datei = new File("\"C:\\TestDatei\\Dateischreiben.csv\"");
        
        double [][] doppelD = {
                {0.2, 0.7, 1.5, 2.0, 3.5, 5.5}
        };
        for(int i = 0; i<doppelD.length; i++) {
            for(int j = 0; j<doppelD[i].length; j++) {
                System.out.println(doppelD[i][j]);
            }
        }
    }

}

nun kommt aber nichts dabei raus also es erstellt keine csv datei (ja ich könnte die ausgabe im Editor speichern unter csv dann würde es in einem excel ordner erscheinen aber das wäre ja nicht der sinn der Sache)
 
Du erzeugst weder einen FileWriter noch verwendest du ihn in deinem Code. Alles was du tust, ist etwas auf der Konsole auszugeben.
 
einem Filewriter kannst du strings zum schreiben geben... ausserdem hast du wieder das mit den semikolons das ich dir ausführlich erklärt hatte nicht drin ... es hängt an merheren stellen... du machst einfach eine datei
 
einem Filewriter kannst du strings zum schreiben geben... ausserdem hast du wieder das mit den semikolons das ich dir ausführlich erklärt hatte nicht drin ... es hängt an merheren stellen... du machst einfach eine datei
Hallo Mart,
das Problem ist die andere Datei die wir besprochen hatten gemeinsam :
Java:
import java.io.File;
import java.io.FileWriter;

public class csvArray {

    public static void main(String[] args) {
        
        FileWriter writer;
        File datei = new File("C:\\TestDatei\\Dateischreiben.csv.csv");
        
        String name[][] = new String[3][3];
        name[0][0] ="Name";
        name[0][1]="Alter";
        name[0][2]="Zweiter_Name";
        name[1][0]="Bob";
        name[1][1]="30";
        name[1][2]="Kleinschmidts";
        name[2][0]="Paul";
        name[2][1]="25";
        name[2][2]="Bergmann";
        for(int rowIndex=0; rowIndex<1; rowIndex++)
        {
            for(int columnIndex=0; columnIndex<1; columnIndex++)
            {
                System.out.println("Name"+";"+"Zweiter_Name"+";"+"Alter");
                System.out.println((name[1][0])+";"+(name[1][2])+";"+(name[1][1]));
                System.out.println((name[2][0])+";"+(name[2][2])+";"+(name[2][1]));
            }
        }
    }
Diese hier würde ja so auch nicht funktionieren da es diese ausgibt im Compiler und nicht in der angegebenen Datei was hab ich hier falsch gemacht?
 
Java:
                System.out.println("Name"+";"+"Zweiter_Name"+";"+"Alter");
                System.out.println((name[1][0])+";"+(name[1][2])+";"+(name[1][1]));
                System.out.println((name[2][0])+";"+(name[2][2])+";"+(name[2][1]));
das bedeutet du printelst es in der Konsole ... was hat die Konsole mit der Datei zu tun ?

du sagst "ich bau mir einen Fernseher tisch, und den Fernseher werf ich aus dem Fenster" und dann wunderst du dich warum er nicht auf dem tisch steht..
 
Im Prinzip fragst du gerade, warum bei folgendem Code nicht der String "Hallo" in die Datei "Testdatei.txt" geschrieben wird:
Java:
import java.io.File;
public class MeineKlasse {
  public static void main(String[] args) {
    File f = new File("Testdatei.txt");
    System.out.println("Hallo");
  }
}
Es gibt doch in deinem (und diesem) Code bei den System.out.println() Aufrufen überhaupt keine Referenz bzw. Angabe auf die Datei.
 
File ist eine Java-Klasse zur Darstellung von Datei- bzw. Verzeichnisnamen.

Du erzeugst in Zeile 9 mit new File("C:\\TestDatei\\Dateischreiben.csv.csv") ein neues File-Objekt und merkst Dir dieses in der Variablen datei, die Du ebenfalls in Zeile 9 vom Typ File deklarierst. Das ist ok.

FileWriter ist eine Klasse, deren Instanzen verwendet werden können, um Text in eine Datei zu schreiben. Du deklarierst zwar in Zeile 8 eine Variable writer, erzeugst aber nirgends ein FileWriter-Objekt.

Du brauchst etwas wie
Java:
File datei = new File("C:\\TestDatei\\Dateischreiben.csv.csv");
try(FileWriter writer = new FileWriter(datei)) {
    writer.write("Test");
}

Dieses "seltsame" try(...) nennt man try-with-resources und sorgt dafür, dass die Datei auch im Fehlerfall korrekt geschlossen wird.
 
Java:
                System.out.println("Name"+";"+"Zweiter_Name"+";"+"Alter");
                System.out.println((name[1][0])+";"+(name[1][2])+";"+(name[1][1]));
                System.out.println((name[2][0])+";"+(name[2][2])+";"+(name[2][1]));
das bedeutet du printelst es in der Konsole ... was hat die Konsole mit der Datei zu tun ?

du sagst "ich bau mir einen Fernseher tisch, und den Fernseher werf ich aus dem Fenster" und dann wunderst du dich warum er nicht auf dem tisch steht..
mein Tutor meinte ich hätte die Aufgabe falsch gemacht, da ich es ja in der console ausgeben lasse aber es soll ja in eine csv datei ausgeben lassen das war nun das was mich verwirrte ich wusste aber jezt nicht wie ich dies tun soll
 
dann probiere es so dass es geht.. ich sagsm al so mihe wird in den 20 jahren was er java macht schonmal nen filewriter benutzt haben wos funktioniert hat genauso wie httpdigest 😉
 
Ich hab ja versucht vorher zu recherchieren habe nur nichts gefunden oder besser gesagt konnte nicht viel damit anfangen
Du hast also den ersten Code von der baeldung Seite gesehen, bei dir rein-gepastet:
Java:
String str = "Hello";
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(str);
writer.close();
dir die vier Zeilen angeguckt und gesagt: "Ne, raff ich nicht."
Das glaube ich dir einfach nicht.
 
Du hast also den ersten Code von der baeldung Seite gesehen, bei dir rein-gepastet:
Java:
String str = "Hello";
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(str);
writer.close();
dir die vier Zeilen angeguckt und gesagt: "Ne, raff ich nicht."
Das glaube ich dir einfach nicht.
nein da hab ich mich falsch ausgedrückt also ich habe es vorher mit einer txt datei gemacht so sah es aus:
Java:
public class DateiSchreiben {

    public static void main(String[] args) {
        FileWriter writer;
        File datei = new File("DateiSchreiben.txt");
        
        try {
            
            
            writer = new FileWriter(datei, true);
            writer.write("Dies ist meine Schreibdatei \n");
            writer.write("Reingeschireben in Java \n");
            writer.write("Ich hatte Spass dabei");
            writer.flush();
            writer.close();
        
        }catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}
Das funktionierte super alles schön und gut nur bei einer .csv datei wurd es schwieriger und ich bekomm es mit den Arrays nicht gebacken
 
nein da hab ich mich falsch ausgedrückt also ich habe es vorher mit einer txt datei gemacht so sah es aus:
Java:
public class DateiSchreiben {

    public static void main(String[] args) {
        FileWriter writer;
        File datei = new File("DateiSchreiben.txt");
       
        try {
           
           
            writer = new FileWriter(datei, true);
[/QUOTE]
     
[CODE=java]   for(int rowIndex=0; rowIndex<1; rowIndex++)

        {

            for(int columnIndex=0; columnIndex<1; columnIndex++)

            {

               write.("Name"+";"+"Zweiter_Name"+";"+"Alter");

                write..((name[1][0])+";"+(name[1][2])+";"+(name[1][1]));

                write((name[2][0])+";"+(name[2][2])+";"+(name[2][1]));

            }

        }

mir ist grad formatierung wurscht...mach halt a und b zusammen?
 
dein "kleiner fehler" für den output... schau dir mal an was überhaupt in der schleife gemacht wird...
 
Das funktionierte super alles schön und gut nur bei einer .csv datei wurd es schwieriger und ich bekomm es mit den Arrays nicht gebacken
Das kann ja nicht sein. Mal zwei Zeilen aus Deinen beiden Programmen, mit denen Du Inhalte ausgibst:
Java:
writer.write(...);
vs
Java:
System.out.println(...);
Ja, es ist schwer zu erkennen aber fällt Dir der marginale Unterschied auf?
 
weil du nix in die DATEI schreibst... die konsole ist keine Datei
ich hab doch aber nun es so gemacht wie du also ohne System.out.println

Java:
public static void main(String[] args) {
        
        FileWriter writer;
        File datei = new File("C:\\TestDatei\\Dateischreiben.csv.csv");
        
        try {
                writer = new FileWriter(datei, true);
        
        String name[][] = new String[3][3];
        name[0][0] ="Name";
        name[0][1]="Alter";
        name[0][2]="Zweiter_Name";
        name[1][0]="Bob";
        name[1][1]="30";
        name[1][2]="Kleinschmidts";
        name[2][0]="Paul";
        name[2][1]="25";
        name[2][2]="Bergmann";
        
        for(int rowIndex=0; rowIndex<1; rowIndex++)
        {
            for(int columnIndex=0; columnIndex<1; columnIndex++)
            {
                writer.write("Name"+";"+"Zweiter_Name"+";"+"Alter");

                writer.write((name[1][0])+";"+(name[1][2])+";"+(name[1][1]));

                writer.write((name[2][0])+";"+(name[2][2])+";"+(name[2][1]));
            }}
        }catch(IOException e) {
            e.printStackTrace();
        }}}
 
erkläre mir was die for schleife macht und dann erkläre mir warum das schmarn ist was sie jetzt tut dann wirst du es sehen
 
Am Ende der Zeile, die du einfügen willst, einfach einen Zeilenumbruch anfügen write("\n").

Das würde ich zumindest einfach mal versuchen.
 
mnja und bei deinem inhalt was passiert da ? warum gibts da 10 mal das gleiche aus ?

du nutzt den index nicht

du machst eifnach nur
Java:
for(jeden Inhalt im array)
    for(jedenInhalt in jedem unter array){
        printe das was an stelle 0 1 ist
    }
du hast 3 arrays mit 3 einträge also printest du 9 mal die stelle 0 1
 
mnja und bei deinem inhalt was passiert da ? warum gibts da 10 mal das gleiche aus ?

du nutzt den index nicht

du machst eifnach nur
Java:
for(jeden Inhalt im array)
    for(jedenInhalt in jedem unter array){
        printe das was an stelle 0 1 ist
    }
du hast 3 arrays mit 3 einträge also printest du 9 mal die stelle 0 1
nein 10 mal gibt er es nicht mehr aus es ist schon eingentlich alles richtig nur das es die Zahlen spaltenweise ausgibt und nicht Zeilenweise und das muss noch geändert werden
 
mnja "printLINE" heißt hier zeilenumbruch... als string ist ein umbruch "\n" zumindest bei windows
 
Zeig mal den kompletten Code, ich glaube kaum, dass der korrekt ist.
public static void main(String[] args) {

FileWriter writer;
File datei = new File("C:\\TestDatei\\Dateischreiben.csv.csv");

try {
writer = new FileWriter(datei, true);

String name[][] = new String[3][3];
name[0][0] = "1";
name[0][1] = "2";
name[0][2] = "3";
name[1][0] = "5";
name[1][1] = "10";
name[1][2] = "15";
name[2][0] = "20";
name[2][1] = "25";
name[2][2] = "30";

for (int rowIndex = 0; rowIndex < 1; rowIndex++) {
for (int columnIndex = 0; columnIndex < 1; columnIndex++) {

writer.write((name[0][0] + ";" + "\n"));
writer.write((name[0][1] + ";" + "\n"));
writer.write((name[0][2] + ";" + "\n"));
writer.write((name[1][0] + ";" + "\n"));
writer.write((name[1][1] + ";" + "\n"));
writer.write((name[1][2] + ";" + "\n"));
writer.write((name[2][0] + ";" + "\n"));
writer.write((name[2][1] + ";" + "\n"));
writer.write((name[2][2] + ";" + "\n"));
writer.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
 
Der Code ist grundlegend falsch: Du nutzt die beiden Schleifen überhaupt nicht (die noch dazu unsinnige Abbruchbedingungen haben) und warum Du nach jedem Semikolon einen Zeilenumbruch ausgibst, weißt Du wahrscheinlich selbst nicht. Das writer.close gehört auch nicht in die Schleife.
 
was muss ich daran nun ändern?
Du musst Deine Einstellung zum Thema ändern: nicht einfach irgendwas rumprobieren sondern systematisch vorgehen.

Du hast ein zweidimensionales Array. Die Werte im Array sind tabellerisch gespeichert und zwar derart, dass mit dem ersten Index die Zeile, mit dem zweiten Index die Spalte adressiert wird. name[2] liefert also das eindimensionale Array, das die Werte der Spalten der dritten Zeile enthält.

Jetzt sollst Du das Array zeilenweise ausgeben - und zwar alle Zeilen. name.length liefert Dir die Anzahl an Zeilen.

Bis dahin haben wir also:
Java:
for (int rowIndex = 0; rowIndex < name.length; rowIndex++) {
    String[] row = name[rowIndex]; 
    // jetzt nur noch alle "Spalten" aus row, gefolgt von einem Semikolon, in einer Zeile ausgeben
    // danach neue Zeile beginnen
}
Über alle Spalten iterieren funktioniert genauso wie über alle Zeilen iterieren.
Java:
for (int rowIndex = 0; rowIndex < name.length; rowIndex++) {
    String[] row = name[rowIndex]; 
    for (int colIndex = 0; colIndex < row.length; colIndex++) {
        String cellValue = row[colIndex];
        // jetzt nur noch cellValue gefolgt von einem Semikolon ausgeben - ohne Zeilenumbruch
    }
    // danach neue Zeile beginnen
}
Den Rest überlasse ich Dir.
 
um jetzt mal verwirrung zu lösen in paar fällen was du nicht verstehst :

1.
Java:
array[1][1]
was tut dieser aufruf? was macht der ? der erste kasten sagt "gib mir das zurück was im feld 1 steht" warum darfst du jetzt dann den zweiten kasten hinschreiben? warum geht das ? in der schule wirds dir keiner sagen

dadurch dass du das array als
Java:
String [][] array
definiert hast heißt das "eine anwendung auf den kasten wird dir ein array zurückliefern"
was heißt das ?????
Java:
String[][]array ...
   
    String[] zweitesArray = array[1];
da der zugriff auf das erste array immer ein string[] zurückliefert darfst du das so schreiben

in mihes code entspricht das dieser zeile
Java:
String[] row = name[rowIndex];


2. was macht das dieses Close ??? dein Filewriter macht was ? er outputtet es in die datei aber das ist ein "stream" dh der läuft die ganze zeit... close heißt wie in windows kill task xyz du bringst ihn um dass er aufhört permanent zu streamen dh du bringst deinen stream dann um wenn du fertig bist

3. es muss doch genervt haben da 10 ma das gleiche zu schreiben ? -> schleife

Java:
for (int columnIndex = 0; columnIndex < 1; columnIndex++) {

writer.write((name[0][0] + ";" + "\n"));
writer.write((name[0][1] + ";" + "\n"));
writer.write((name[0][2] + ";" + "\n"));
writer.write((name[1][0] + ";" + "\n"));
writer.write((name[1][1] + ";" + "\n"));
writer.write((name[1][2] + ";" + "\n"));
writer.write((name[2][0] + ";" + "\n"));
writer.write((name[2][1] + ";" + "\n"));
writer.write((name[2][2] + ";" + "\n"));
writer.close();
}
du verwendest die Indexe nicht also kannst du dir die schleife sparen ... eine For schleife bei der die indexe oder das worüber iteriert wird nicht verwendet wird ist NUTZLOS also mache sie NUTZVOLL warum hatte ich dir denn das mit der column und row vorgeschlagen.... wenn du einen plan hast wie der hanze kladeradatsch raus kommen sollte würdest du es verstehen da diese der reihe und spalte in der csv datei entsprechen

4. warum ist da überall semikolon am ende ? eine csv datei wird so übersetzt
semikolon -> in die nächste zelle springen
\n -> in die nächste zeile springen



ich weis nicht woran es höngt .. nur die for schleife ist gerade etwas von trauriger natur

bitte nicht zu negativ auffassen
 
um jetzt mal verwirrung zu lösen in paar fällen was du nicht verstehst :

1.
Java:
array[1][1]
was tut dieser aufruf? was macht der ? der erste kasten sagt "gib mir das zurück was im feld 1 steht" warum darfst du jetzt dann den zweiten kasten hinschreiben? warum geht das ? in der schule wirds dir keiner sagen

dadurch dass du das array als
Java:
String [][] array
definiert hast heißt das "eine anwendung auf den kasten wird dir ein array zurückliefern"
was heißt das ?????
Java:
String[][]array ...
 
    String[] zweitesArray = array[1];
da der zugriff auf das erste array immer ein string[] zurückliefert darfst du das so schreiben

in mihes code entspricht das dieser zeile
Java:
String[] row = name[rowIndex];


2. was macht das dieses Close ??? dein Filewriter macht was ? er outputtet es in die datei aber das ist ein "stream" dh der läuft die ganze zeit... close heißt wie in windows kill task xyz du bringst ihn um dass er aufhört permanent zu streamen dh du bringst deinen stream dann um wenn du fertig bist

3. es muss doch genervt haben da 10 ma das gleiche zu schreiben ? -> schleife

Java:
for (int columnIndex = 0; columnIndex < 1; columnIndex++) {

writer.write((name[0][0] + ";" + "\n"));
writer.write((name[0][1] + ";" + "\n"));
writer.write((name[0][2] + ";" + "\n"));
writer.write((name[1][0] + ";" + "\n"));
writer.write((name[1][1] + ";" + "\n"));
writer.write((name[1][2] + ";" + "\n"));
writer.write((name[2][0] + ";" + "\n"));
writer.write((name[2][1] + ";" + "\n"));
writer.write((name[2][2] + ";" + "\n"));
writer.close();
}
du verwendest die Indexe nicht also kannst du dir die schleife sparen ... eine For schleife bei der die indexe oder das worüber iteriert wird nicht verwendet wird ist NUTZLOS also mache sie NUTZVOLL warum hatte ich dir denn das mit der column und row vorgeschlagen.... wenn du einen plan hast wie der hanze kladeradatsch raus kommen sollte würdest du es verstehen da diese der reihe und spalte in der csv datei entsprechen

4. warum ist da überall semikolon am ende ? eine csv datei wird so übersetzt
semikolon -> in die nächste zelle springen
\n -> in die nächste zeile springen



ich weis nicht woran es höngt .. nur die for schleife ist gerade etwas von trauriger natur

bitte nicht zu negativ auffassen
nein ich fasse es keineswegs negativ auf und freue mich über jeden post.
Also du hast aufjedenfall recht es würde kein sinn machen alles 10 mal runterzu schreiben das würde bei größeren werten schwierig werden.
Soll ich es also wie am Anfang lassen also z.b.:

Java:
 writer.write("Name"+";"+"Zweiter_Name"+";"+"Alter");

                writer.write((name[1][0])+";"+(name[1][2])+";"+(name[1][1]));

                writer.write((name[2][0])+";"+(name[2][2])+";"+(name[2][1]));
aber dann an der forschleife arbeiten?
 
JA

und unbedingt das von mihe übernehmen da der zugriff auf werte mittels
Java:
array[X][Y]
katastrophal zu lesen ist !
 

Zurück
Oben