2012-09-21 163 views
0

我在這裏新手 我有下面的代碼它很好,但當我給一個特殊字符(@,%,*等)作爲輸入它必須拋出異常,所以我怎麼能要做到這一點可以有人幫助我,因爲上午新手程序員java處理字符異常

/*代碼檢查值*/

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
public class CheckVal 
{ 
    public static void main(String args[]) 
{ 
    int i=0; 
    double x=0; 
    System.out.println("Enter your angle"); 
    try{ 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    i=Integer.parseInt(br.readLine()); 

    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
    System.out.println(i); 
    x=Math.sin(Math.toRadians(i)); 
    System.out.println(x); 
    if(x>=0 && x<=0.5) 
    { 
     ButtonBackground frame = new ButtonBackground("green"); 
     //frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(false); 

     frame.setVisible(true); 


    } 
    else{ 
     ButtonBackground frame = new ButtonBackground("red"); 
     //frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(false); 

     frame.setVisible(true); 
     } 
    } 
} 

/代碼buttonbackground/

import java.awt.*; 
import javax.swing.*; 

public class ButtonBackground extends JFrame 
{ 
    public ButtonBackground(String x) 
    { 
     setLayout(new FlowLayout()); 
     //JButton normal = new JButton(" "); 
     // add(normal); 
     if(x.equals("green")) { 
      JButton test1 = new JButton(" ") 
      { 
       @Override 
       public void paintComponent(Graphics g) 
       { 
        g.setColor(Color.GREEN); 
        g.fillRect(0, 0, getSize().width, getSize().height); 
        super.paintComponent(g); 
       } 
      }; 
      test1.setContentAreaFilled(false); 
      test1.setBackground(Color.GREEN); 
      add(test1); 
     } 
     else 
     { 
     JButton test1 = new JButton(" ") 
      { 
       @Override 
       public void paintComponent(Graphics g) 
       { 
        g.setColor(Color.RED); 
        g.fillRect(0, 0, getSize().width, getSize().height); 
        super.paintComponent(g); 
       } 
      }; 
      test1.setContentAreaFilled(false); 
      test1.setBackground(Color.RED); 
      add(test1); 
     } 
    } 
} 
+4

請不要張貼代碼牆。取而代之的是一個[合適的例子](http://sscce.org/)。 – Adam

回答

1

據我所知,它已經做到了,但你正在抓住它。作爲一個建議,儘量避免使用神奇寶貝try-catch方法(通過捕獲一個通用的Exception)。

這樣做

try { 
    //your code 
} catch (Exception e) { 

} 

你捕捉每一種例外是嘗試內的代碼可以拋出的,而不必知道哪裏出了問題的機會。如果你的應用程序失敗了,這會成爲一場噩夢,因爲它不會「破壞」,但它不會做你想做的事情。

特別是你想得到一個整數,如果你得到特殊字符,你想拋出一個異常。 IllegalArgumentException似乎符合您的特殊需求,因爲特殊字符畢竟是非法的參數。我建議,而不是這種投入閱讀:

System.out.println("Enter your angle"); 
try{ 
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
i=Integer.parseInt(br.readLine()); 

} 
catch(Exception e) 
{ 
    System.out.println(e); 
} 

你嘗試用這樣的:

System.out.println("Enter your angle"); 
try{ 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    i=Integer.parseInt(br.readLine()); 
} 
catch(NumberFormatException e) 
{ 
    throw new IllegalArgumentException(); 
} 

如果我沒有記錯的話,這就是你想要的。

作爲一個方面說明,請記住捕捉IllegalArgumentException,以便它不會傳播。爲了更好地管理它,可以嘗試創建一個讀取輸入並返回int的函數,或者在給定情況下拋出異常。

private int readEntry() throws IllegalArgumentException { 
    try { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     i=Integer.parseInt(br.readLine()); 
    } catch(NumberFormatException e) { 
     throw new IllegalArgumentException(); 
    } 
} 

然後你可以在你的主函數中調用它,並做你認爲必要的任何事情。這也提高了可讀性。

int input = readEntry(); //Surround this with a try-catch and catch the IllegalArgumentException if you want to control it. 
+0

很好地解釋了Gamb!感謝:) – Mohsin

+0

感謝Gamb,接受任何更多的建議 –

+0

作爲一個方面說明,我可以做的另一個建議是儘量重複使用儘可能多的代碼。例如,除了顏色設置外,「if-else」塊包含幾乎相同的代碼。你可以只有一個該代碼的實例,並用'Color currentColor = x.equals(「green」)開頭定義使用哪種顏色? Color.GREEN:Color.RED;'(通常稱爲「inline if」,如果你不熟悉if-else),那麼你可以用'currentColor'調用setColor和setBackground方法,變量。這樣你最終可以用更少的代碼完成相同的操作。 – Gamb