Frage zu IO programmcode

  • Themenstarter Themenstarter Unregistriert
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
U

Unregistriert

Gast
import java.io.*;
class TestRead {
public static void main(String[] args) throws IOException {
byte[] bt, bt1;
int i, len;
String s;
bt = new byte[80];
System.out.println("Bitte Text eingeben:");
System.in.read(bt);
System.out.println("(char)bt[0] = " + (char)bt[0]);
s = new String(bt);
System.out.println("s = " + s);



bt1 = new byte[80];
System.out.println("Bitte Integer eingeben:");
len = System.in.read(bt1);
System.out.println("len = " + len);
s = new String(bt1, 0, len-1);
System.out.println("s = " + s);
i = new Integer(s); // oder i = Integer.parseInt(s);
System.out.println("i = " + i);
}
}

mir geht es um den unteren Teil des Programmes. Ich verstehe nicht wie der Wert von Int len zustande kommt.
ich gebe ein int wert ein z.b 19, erhalte dann aber für len wert 4. es müsste doch der selbe ausgegeben werden wie ich vorher in bt1 festgelegt habe?!
 
Java:
len = System.in.read(bt1);
len = anzahl der gelesenen Zeichen = 19[ENTER] => 1+9+cr+lf (carriage return, linefeed)

in bt1 festgelegte Länge
Java:
bt1 = new byte[80];
len = bt1.lenght //=80
 
ok danke.

habe noch eine frage:

s = new String(bt1, 0, len-1);

in der ausgabe erhalte ich z.b s=4.
wieso erhalte ich nur bt1 zurück.was passiert mit 0 und len-1?
 
der Konstruktor new String(bt1, 0, len-1);
sieht so aus:
String(byte[] bytes, int offset, int length)
d.h. die 0 und len-1 sind parameter für den Start und die Länge des "SubStrings"
in diesem Fall wäre new String(bt1, 0, len-2) besser damit der CR nicht beim parseInt stört
 
ich verstehe nicht,wieso len -1 beim parseint stört und -2 nicht.könntest du das nochmal bitte genauer erläutern?
 
Beispiel mit der eingabe > 19[ENTER]

die read() Methode liest> 0x31 0x39 0x0D 0x0A
übersetzt heißt das: > 1 9 cr lf (siehe ascii tabelle)
das bt-Array enthält also diese 4 zeichen (len=4)

new String(bt, 0, len-1) bedeutet: beginne bei bt[0] und verwende len-1=3 zeichen
bt[0] + bt[1] + bt[2] = 1 + 9 + cr
dem String stört dieses cr nicht, aber das parseInt kann es nicht verarbeiten

bei new String(bt, 0, len-2) wird nur noch bt[0] und bt[1] verwendet, und es bleiben nur noch Zahlen im String

gut zum Anschauen ist folgende Funktion
System.out.printf("als Int: %d; als char: %c; als hex: %h \n", bt[0], bt[0], bt[0]);
 
ich hätte da noch eine frage:

Warum ist die Umwandlung der “byte”-Arrays “bt” und “bt1” in eine
“String”-Variable “s” notwendig?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben