package io;
import java.io.*;
public class UserIO {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char c;
try {
c = (char)br.read(); //Input a character from user
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("c: " + c);
}
}
程序无法编译。
错误:局部变量c可能尚未初始化
答案 0 :(得分:1)
初始化char c = '';
。
如果您的try
阻止失败,则您的角色c
将没有任何价值。
try {
c = (char)br.read(); //Input a character from user
} catch (IOException e) {
e.printStackTrace();
}
如果在c
内投放了Exception
,则上述代码可能不会为br.read()
分配任何值。因此,当执行System.out.println("c: " + c);
时,编译器不知道要打印什么。为了避免这种情况,Java会强制您初始化局部变量。
如果使用c
初始化char c = '';
,即使您的try
块失败,编译器也至少可以打印``。
您应该可以执行以下操作:
char c;
c = 'a';
System.out.println("c:" + c);
在这种情况下,它将成功编译,因为当您打印值时,编译器知道它肯定会有一些值,而try
块不是这种情况(它可能有也可能没有任何值)。
答案 1 :(得分:0)
考虑一下:如果try
阻止失败,System.out.println("c: " + c)
会打印出什么?好吧,无论c
块之前有什么值try
。在{try}之前c
最后持有什么价值?没有,你没有指定任何先前的值,该值未初始化。因此,错误消息。
解决方案:在声明时(或在c
块中)为finally
提供默认值。可以在try-block失败的情况下使用。
答案 2 :(得分:0)
您需要在完成后实际阅读用户输入的内容
while ((c = (char) br.read()) != -1) {
System.out.println("c: " + c);
}
}
}