Announcement

Collapse
No announcement yet.

Lesen aus System.in über inputStreamReader zeigt nur jedes 2. Zeichen an

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lesen aus System.in über inputStreamReader zeigt nur jedes 2. Zeichen an

    Hallo!

    Wenn ich meinen Code so schreibe, dann klappts:

    Code:
            InputStreamReader ir = new InputStreamReader(new BufferedInputStream(
                    System.in));
            int i;
            try {
                while ((i = ir.read()) != -!) {
                    System.out.print((char) i);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ir != null) {
                    try {
                        ir.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    Wenn ich ihn so schreibe, wird nur jedes 2. Zeichen ausgegeben (also 'et' statt 'Test')
    Code:
            InputStreamReader ir = new InputStreamReader(new BufferedInputStream(
                    System.in));
            try {
                while (ir.read() != -1) {
                    System.out.print(ir.read());
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ir != null) {
                    try {
                        ir.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    Woran liegt das?

  • #2
    Dein erster Code kann so nicht laufen.

    while((i=ir.read())!=-!)

    sollte dir als Fehler angezeigt werden.
    Woran liegt das?
    Siehe API zu InputSteamreader:

    read:
    Reads a single character. This method will block until a character is available, an I/O error occurs, or the end of the stream is reached.


    Du hast in dem while ein read und im System.out. Das erste read wird nie ausgegeben




    [highlight=java]

    while((i=ir.read())!=-1)



    [/highlight]
    Zuletzt editiert von Christian Marquardt; 26.08.2014, 14:02.
    Christian

    Comment


    • #3
      ah klar, da wird ja auch schon ein Zeichen gelesen, obwohl ich's nicht in ner Variable speicher... Dank!

      (Beim oberen Code sollte das natürlich eine 1 sein und kein !)

      Comment


      • #4
        Ich würde dir generell raten auf die Programmierung mit Seiteneffekten zu verzichten. Da kommen häufig nur Fehler raus, die man dann bei der Fehlersuche leicht mal übersieht

        Comment

        Working...
        X