1

Запускаю под отладчиком код:

import java.io.*;

public class Program {

    public static void main(String[] args) throws IOException {
        char[] buf;
        buf = new char[9];
        BufferedInputStream bf = new BufferedInputStream(System.in);

        try{
            int i, j, el;
            j = bf.available();
            char c;
            while(((i = bf.read()) != -1) & j > 0) {
                c = (char) i;
                j = bf.available();
                buf[j] = c;
            }
            el = Integer.parseInt(String.copyValueOf(buf));
            System.out.println(el);
        }
        finally{
            bf.close();
        }
    }
}

в консоле набираю например: "123", почему никогда не выполняется код ниже?:

    el = Integer.parseInt(String.copyValueOf(buf));

цикл while выполняется без проблем, а далее ничего не происходит.

Почему не выполняется блок кода ниже?

    el = Integer.parseInt(String.copyValueOf(buf));
    System.out.println(el);

1 Answers1

1

Потому что у вас не выполняется цикл while, поэтому и в ваш el нечего положить...

Чтобы особо не ломать вашу задумку, предлагаю вам оформить код в блоке try следующим образом:

int i, j = 0, el;
char c;
while((i = bf.read()) != 1 && bf.available() > 0) {
    c = (char) i;
    buf[j] = c;
    j++;
}
el = Integer.parseInt(String.copyValueOf(buf).trim());
System.out.println(el);

К String.copyValueOf(buf).trim() добавил метод trim(), чтобы схлопнуть пробелы, которые у вас будут из-за заранее объявленной размерности массива.

Dmitrii
  • 2,673