Как проверить, инициализирована ли переменная?
Приложение получает значения для двух переменных из текстового файла построчно через BuferedReader в цикле while. Мне нужно использовать обе переменные, но если использовать их после цикла приложение не компилируется с ошибкой:
Integer a - Program.main(String[]) The local variable a may not have been initialized
Если сразу дать переменным какое либо значение, то приложение компилируется и работет как надо, но значения должны передаваться именно из файла. Я пробовал сразу сделать значения для переменных null, но в таком случае выходить ошибка:
a = Exception in thread "main" java.util.IllegalFormatConversionException: a != java.lang.Integer at java.base/java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4442) at java.base/java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2976) at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2924) at java.base/java.util.Formatter.format(Formatter.java:2689) at java.base/java.io.PrintStream.format(PrintStream.java:1209) at java.base/java.io.PrintStream.printf(PrintStream.java:1105) at Program.main(Program.java:31)
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
String formatException = "Неправильный формат, проверьте правильность строки в input.txt";
String str;
Integer a = null;
Integer b = null;
while ((str = br.readLine()) != null) {
String[] datas = str.split(" ");
if(datas[0].equals("a")){
try {
a = Integer.valueOf(datas[1]);
} catch (Exception e) {
System.out.println(formatException);
}
}
else if(datas[0].equals("b")){
try {
b = Integer.valueOf(datas[1]);
} catch (Exception e) {
System.out.println(formatException);
}
}
else{
System.out.println(formatException);
}
}
if(a != null && b != null){
System.out.printf("a = %a, b = %b", a, b);
}
else{
System.out.println(formatException);
}
br.close();
}
Значения в файле должны быть записаны в формате:
a число
b число
Ответы (1 шт):
У вас ошибка в строке
System.out.printf("a = %a, b = %b", a, b);
Замените на:
System.out.printf("a = %d, b = %d", a, b);
А использование null для неинициализированной переменной абсолютно правильный подход