2011-03-28 68 views
0

我一直在這一點工作,它不會編譯。它給了我一個錯誤說使用開關並嘗試聲明來驗證用戶輸入

變量的選擇可能沒有 初始化 開關(選擇) ^

,但我在程序變量集。所以我不知道問題是什麼?它是否真的能夠避免編譯?

import java.io.*; 
    import javax.swing.JOptionPane; 

    public class MyType 
    { 
     public static void main(String[] args) 
     { 
      String strChoice = "", strTryString, strTryInt, strTryDouble; 
      Integer choice, tryInt; 
      double tryDouble; 
      boolean done = false; 

      while(!done) 
     { 
       try 
       { 
        String answer = JOptionPane.showInputDialog(null, "What's my type\n\n\n1) String\n2) integer\n3) double\n4) Quit the program"); 
        choice = Integer.parseInt(strChoice); 

        //test for valid codes 1, 2, 3, or 4 
        if (choice<1 || choice>4) throw new NumberFormatException(); 
        else done = true; 
       } 
        catch(NumberFormatException e) 
       { 
        JOptionPane.showInputDialog(null, "Please enter a 1, 2, 3, or 4", "Error", JOptionPane.INFORMATION_MESSAGE); 
        switch(choice) 
       { 
         case 1: 
          JOptionPane.showMessageDialog(null, "Correct, any input can be saved as a String"); 
          break; 

         case 2: 
          JOptionPane.showMessageDialog(null, "Correct!"); 
          tryInt = Integer.parseInt(strChoice); 
          break; 

         case 3: 
          JOptionPane.showMessageDialog(null, "Correct!"); 
          tryDouble = Integer.parseInt(strChoice); 
          break; 

         case 4: 
          done = true; 
          JOptionPane.showMessageDialog(null, "Exit."); 
          System.exit(0); 
          break; 
         default: throw new NumberFormatException(); 
      } 
      } 

      } 
     } 
    } 
+0

僅供參考'Java',而不是'JAVA' :) – 2011-03-28 19:22:03

回答

0

如果showInputDialog拋出,那麼'choice'沒有設置。

try 
      { 
       String answer = JOptionPane.showInputDialog(null, "What's my type\n\n\n1) String\n2) integer\n3) double\n4) Quit the program"); 
       choice = Integer.parseInt(strChoice); 

       //test for valid codes 1, 2, 3, or 4 
       if (choice<1 || choice>4) throw new NumberFormatException(); 
       else done = true; 
      } 
       catch(NumberFormatException e) 
      { 
+0

還是不明白有什麼問題?我是新來的。 – 2011-03-28 19:26:14

+0

好吧,我想通了。我只需要將整數'choice'設置爲零。謝謝 – 2011-03-28 19:31:42

+2

@Josh:你不應該依靠你的代碼來拋出一個異常,以達到你的正常代碼路徑。雖然它總是會拋出NFE,因爲你只解析空字符串,而不是用戶實際輸入的內容(你忽略了「answer」變量)。 – 2011-03-28 19:52:31

0

你應該嘗試塊之前iniatialize選擇的變量,因爲你是在抓,在某些情況下,如果異常被選擇happining那麼varaible選擇將未初始化的初始化之前扔引用它。