Неожиданный вывод с использованием статического блока в Java

Я пытаюсь выполнить этот код, но он каждый раз дает мне случайные значения:

Выход:

Выход

Код:

public class Temp  {
    static int x;
    static {
        try {
            x = System.in.read();
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }
}


class TempA {
    public static void main(String[] args) {
        System.out.println(Temp.x);
    }
}

2 ответа

Решение

Значения не случайны, они:

[...] следующий байт данных из входного потока. Байт значения возвращается как целое число в диапазоне от 0 до 255. Если байт не доступен, поскольку достигнут конец потока, возвращается значение -1. http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

Это означает, что если вы введете a и ударил Enter ты получишь 97,

Если вы ищете содержимое того, что было набрано (а не необработанное значение байта), вам нужно внести некоторые изменения... Самый простой способ использовать Scanner учебный класс. Вот как вы получаете числовое значение:

import java.util.Scanner;

public class Temp  {
    static int x;
    static {
        Scanner sc = new Scanner(System.in);
        x = sc.nextInt();
    }
}


class TempA {
    public static void main(String[] args) {
        System.out.println(Temp.x);
    }
}

Смотрите также метод System.in.read().

Это потому, что ASCII значение первой цифры / символа вашего ввода.

Другие вопросы по тегам