Неожиданный вывод с использованием статического блока в 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
значение первой цифры / символа вашего ввода.