异常处理错误:无法找到符号变量

问题描述:

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。我该如何解决?

+1

你伙计们,非常感谢你们!我不知道那件事。我的程序现在完美工作,谢谢你一百万次! – Ciara

+0

接受答案是个好主意:) – Suranga

这是因为你已经声明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); 
........