异常处理错误:无法找到符号变量
问题描述:
public static void operation() {
try {
Scanner input = new Scanner(System.in);
String choiceString = "";
char choice = 'a';
System.out.print("Enter letter of choice: ");
choiceString = input.next();
if (choiceString.length() == 1) {
choice = choiceString.charAt(0);
System.out.println("-------------------------------------------");
switch(choice) {
case 'a': {
....
break;
}
case 'b': {
....
}
default:
throw new StringException("Invalid choice...");
}
}else {
throw new StringException("Invalid input...");
}
} catch(StringException i) {
System.out.println("You typed " + choiceString + i);
}
当程序提示用户输入选择的字母,并且用户输入一个单词或数字时,它应该捕获异常。它应该显示这个输出:异常处理错误:无法找到符号变量
You typed: ashdjdj
StringException: Invalid input...
这里的问题是,它找不到变量choiceString。我该如何解决?
答
这是因为你已经声明try块内的变量声明它的try块外
答
你的问题是,在try块中声明变量的作用域不会从相应的catch块可见。要解决编译错误,声明变量外尝试像这样,
public static void operation() {
String choiceString = "";
try {
...
} catch(StringException i) {
System.out.println("You typed " + choiceString + i);
}
}
答
申报choiceString外try catch块,它应该解决
答
choiceString在try块声明,所以局部的问题范围。您可以移动choiceString到try-catch块之外的你需要它在catch块的范围可供选择:
String choiceString = "";
try {
// omitted for brevity
} catch(StringException i) {
System.out.println("You typed " + choiceString + i);
}
答
移动你的choiceString出这样的try块,
String choiceString = "";
try {
Scanner input = new Scanner(System.in);
........
你伙计们,非常感谢你们!我不知道那件事。我的程序现在完美工作,谢谢你一百万次! – Ciara
接受答案是个好主意:) – Suranga