Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Vorheriges Thema | Nächstes Thema 

Autor Nachricht
 Betreff des Beitrags: Frage zu Tag3 Uebung2
BeitragVerfasst: 10. Oktober 2013, 00:29 
1.Semester

Registriert: 20. September 2013, 00:14
Beiträge: 4
Hallo!

Ich versuche gerade, Tag 3, Übung 2 zu programmieren. So sehen meine beiden Klassen aus:

  1. package tag3Uebung2;
  2.  
  3. import java.io.*;
  4. public class LiesVieleWerte {
  5.  
  6.     public static void main(String[] args) {
  7.         String name = args[0];
  8.         try {
  9.             FileInputStream fis = new FileInputStream(name);
  10.             InputStreamReader isr = new InputStreamReader(fis);
  11.             BufferedReader bur = new BufferedReader(isr);
  12.            
  13.             String sLine = bur.readLine();
  14.            
  15.             while (sLine != null) {
  16.                 System.out.println(sLine);
  17.                 sLine = bur.readLine();
  18.             }
  19.            
  20.             bur.close();
  21.            
  22.         } catch (Exception eIO) {
  23.             System.out.println("Folgender Fehler trat auf: " + eIO);
  24.         }
  25.  
  26.     }
  27.  
  28. }
  29.  


  1. package tag3Uebung2;
  2.  
  3. import java.io.*;
  4.  
  5. public class ErzeugeVieleWerte {
  6.     public static void main(String[] args) {
  7.         String dateiname = args[0];
  8.         try {
  9.             BufferedWriter myWriter = new BufferedWriter(new FileWriter(dateiname, false));
  10.            
  11.             //Werte erzeugen
  12.             for (int i = 1; i <= 10; i++) {
  13.                 for (int j = 1; j <= 5; j++) {
  14.                     int ergebnis = i*i + j;
  15.                     //System.out.print(ergebnis + " ");
  16.                     myWriter.write(ergebnis);
  17.                 }
  18.                 //System.out.println();
  19.                 myWriter.write("\n");
  20.             }
  21.             myWriter.close();
  22.         } catch (IOException eIO) {
  23.             System.out.println("Folgender Fehler: " + eIO);
  24.         }
  25.  
  26.     }
  27.  
  28. }
  29.  

Dies ist die Ausgabe, die ich bei der Eingabe von "werte.dat" erhalte:


(Hier fehlen ein paar der Symbole, die bei mir in der Ausgabe erscheinen)




%&'()
23456
ABCDE
RSTUV
efghi

Ich programmiere mit Eclipse.

Woran kann es liegen, dass ich diese eigenartige Ausgabe erhalte? -Für etwas Unterstützung wäre ich dankbar.

Viele Grüße, Gina


Nach oben
 Offline     Profil  
 
 Betreff des Beitrags: Re: Frage zu Tag3 Uebung2
BeitragVerfasst: 13. Oktober 2013, 14:24 
Java-Tutor
Benutzeravatar

Registriert: 28. April 2008, 18:09
Beiträge: 159
Wohnort: Cochem an der Mosel
Hi Gina,

  1.            //Werte erzeugen
  2.             for (int i = 1; i <= 10; i++) {
  3.                 for (int j = 1; j <= 5; j++) {
  4.                     int ergebnis = i*i + j;
  5.                     //System.out.print(ergebnis + " ");
  6.                     myWriter.write(ergebnis);
  7.                 }
  8.                 //System.out.println();
  9.                 myWriter.write("\n");
  10.             }


du benutzt BufferedWriter (myWriter) und die Methode write von Writer.
http://docs.oracle.com/javase/7/docs/api/
Diese schreibt entweder single Character oder Arrays von Character oder Strings. Du übergibst dieser Methode aber ein int (ergebnis). Da write damit nicht viel Anfangen kann, wird die Intzahl mit Hilfe der ASCII-Tabelle in das hinter dem Int-Code stehende Zeichen umgewandelt. Da es in diesen Tabellen darstellbare Zeichen (z. B. 65='A') und nicht darstellbare (z. B. 7=BELL(Klingel/ton) gibt, es außerdem noch auf deine local-Einstellung ankommt (Unicode), bekommst du diese "kryptischen" Zeichen.

Du mußt dem Writer dazu bringen, die Int-Zahl in Text oder Zeichen umzuwandeln. Das machst du mit myWrite(ergebnis + " ") - wie bei System.out.write(). Wenn du das wieder aus der Datei ausliest, hast du ebenfals Text bzw. Zeichen. Um damit zu rechnen mußt du sie wieder in Int's umwandeln.

Viele grüße

festus

_________________
wait and 'C'


Nach oben
 Offline     Profil  
 
 Betreff des Beitrags: Re: Frage zu Tag3 Uebung2
BeitragVerfasst: 16. Oktober 2013, 00:15 
1.Semester

Registriert: 20. September 2013, 00:14
Beiträge: 4
Hallo festus!

Danke für deine Bemühungen. So ganz verstehe ich noch nicht, wie ich das Programm zum Laufen kriegen kann. Ich übergebe dem Writer mit myWriter.write(ergebnis) eine int-Zahl, die dieser als char in die Datei schreibt. Nun habe ich mir überlegt, dass ich die char mit der Methode LiesVieleWerte wieder als Integer ausgeben möchte. Dazu habe ich die Zeile 16 von System.out.println(sLine); zu
System.out.println(Integer.parseInt(sLine)); umgeändert.
Ich erhalte diese Fehlermeldung:
Folgender Fehler trat auf: java.lang.NumberFormatException: For input string: ""
Ich dachte, die Verkettung der Reader wandelt die gespeicherten char in String und durch parseInt könnte ich diese wieder in int umwandeln.
Wo liegt hier der Fehler?

Viele Grüße, Gina


Nach oben
 Offline     Profil  
 
 Betreff des Beitrags: Re: Frage zu Tag3 Uebung2
BeitragVerfasst: 16. Oktober 2013, 14:57 
1.Semester

Registriert: 4. April 2011, 13:47
Beiträge: 4
Ahoi,
Ich arbeite zufälligerweise gerade mit Ähnlichem.
Ich speichere Werte erst in eine ArrayList und wenn sie Komplett ist übergebe ich diese. Um Sie wieder auszulesen lese ich die datei als ArrayList wieder aus und gehe die einträge aus der ArrayList mit einer for-schleife durch.
MfG
Ekko


Nach oben
 Offline     Profil  
 
 Betreff des Beitrags: Re: Frage zu Tag3 Uebung2
BeitragVerfasst: 19. Oktober 2013, 21:55 
Java-Tutor
Benutzeravatar

Registriert: 28. April 2008, 18:09
Beiträge: 159
Wohnort: Cochem an der Mosel
Hallo Gina,

kein Problem. Eh ja, richtig das kommt. Eine NumberFormatException wird dann geworfen, wenn parseInt auf ein Zeichen trifft, das keine Zahl ist. Also Du liest die ganze Zeile auf einmal aus mit 5 Zahlen und den Leerzeichen. Dann versuchst Du das Ganze in ein Int zu parsen, was logischerweise schiefgehen muß. Ein Leerzeichen ist nun mal keine Zahl und Du möchtest wahrscheinlich auch dann 5 Zahlen wiederbekommen und nicht nur eine große.
Das was in sLine steht ist z. B. folgendes: "2 3 4 5 6".

Entweder Du änderst in ErzeugeVieleWerte das Speichern der Zahlen so, dass Du nur noch eine Zahl pro Zeile hast:
anstatt
  1. myWriter.write(ergebnis + " ");

das hier:
  1. myWriter.write(ergebnis+"\n");


oder Du änderst in LiesVieleWerte das parsen der Int's. Z. B. mit StringTokenizer. Es ist nur ein Beispiel von mehreren mit dem das erledigt werden kann. Anstatt
  1. while (sLine != null) {
  2.                 System.out.println(sLine);
  3.                 sLine = bur.readLine();
  4.             }

das hier:
als erstes import java.util.StringTokenizer;
danach
  1.  
  2.     public static void main(String[] args) {
  3.         String name = args[0];
  4.         StringTokenizer st;
  5.         try {
  6.             FileInputStream fis = new FileInputStream(name);
  7.             InputStreamReader isr = new InputStreamReader(fis);
  8.             BufferedReader bur = new BufferedReader(isr);
  9.            
  10.             String sLine = bur.readLine();
  11.            
  12.             while (sLine != null) {
  13.                st = new StringTokenizer(sLine," ");
  14.                while(st.hasMoreTokens())
  15.                   System.out.println(Integer.parseInt(st.nextToken()));
  16.                 sLine = bur.readLine();
  17.             }
  18.            
  19.             bur.close();
  20.            
  21.         } catch (Exception eIO) {
  22.             System.out.println("Folgender Fehler trat auf: " + eIO);
  23.         }
  24.  
  25.     }
  26.  

Du mußt also den String quasi auseinander nehmen.

Viele Grüße

festus

Gina hat geschrieben:
Hallo festus!

Danke für deine Bemühungen. So ganz verstehe ich noch nicht, wie ich das Programm zum Laufen kriegen kann. Ich übergebe dem Writer mit myWriter.write(ergebnis) eine int-Zahl, die dieser als char in die Datei schreibt. Nun habe ich mir überlegt, dass ich die char mit der Methode LiesVieleWerte wieder als Integer ausgeben möchte. Dazu habe ich die Zeile 16 von System.out.println(sLine); zu
System.out.println(Integer.parseInt(sLine)); umgeändert.
Ich erhalte diese Fehlermeldung:
Folgender Fehler trat auf: java.lang.NumberFormatException: For input string: ""
Ich dachte, die Verkettung der Reader wandelt die gespeicherten char in String und durch parseInt könnte ich diese wieder in int umwandeln.
Wo liegt hier der Fehler?

Viele Grüße, Gina

_________________
wait and 'C'


Nach oben
 Offline     Profil  
 
 Betreff des Beitrags: Re: Frage zu Tag3 Uebung2
BeitragVerfasst: 12. Januar 2014, 01:05 
1.Semester

Registriert: 20. September 2013, 00:14
Beiträge: 4
Hallo Festus,

Ich habe dProgramm nach deinen Vorschlägen geändert. Es sieht jetzt so aus:

package tag3Uebung2;

import java.io.*;
import java.util.StringTokenizer;
public class LiesVieleWerte {

public static void main(String[] args) {
String name = args[0];
StringTokenizer st;
try {
FileInputStream fis = new FileInputStream(name);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bur = new BufferedReader(isr);

String sLine = bur.readLine();

while (sLine != null) {
st = new StringTokenizer(sLine, " ");
while (st.hasMoreTokens())
System.out.println(Integer.parseInt(st.nextToken()));
sLine = bur.readLine();
}

bur.close();

} catch (Exception eIO) {
System.out.println("Folgender Fehler trat auf: " + eIO);
}

}

}

Die Klasse ErzeugeVieleWerte ist gleich geblieben. Als Fehlermeldung erhalte ich immer noch:
Folgender Fehler trat auf: java.lang.NumberFormatException: For input string: "(vier Rechtecke)". Woran könnte es liegen?

Danke und viele Grüße, Gina


Nach oben
 Offline     Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2007 phpBB Group


Picksel Media Marco Block © 2006-2009 – ImpressumKontakt
Gestaltung und Umsetzung Tobias Losch, www.picksel-media.de