2013-12-17 106 views
0

我想編寫一個轉換十進制數字的程序。我發現問題是我甚至無法獲得「追趕路徑」。 我也知道我必須改變與char的東西,但我絕對沒有得到一個工作解決方案。謝謝。在Java中執行異常的問題

import java.util.Scanner; 

public class BinaryStringToNumber { 

    public static void main(String[] args) { 

     String inputBinaer; 
     Scanner input = new Scanner(System.in); 
     System.out.print("Type in a binary number: "); 
     inputBinaer = input.next(); 
     input.close(); 

     try 
      { 
      convert(inputBinaer); 
      } 
      catch (NumberFormatException e) 
      { 
      System.out.println("Just numbers!"); 
      } finally { 
      System.out.println("Finally"); 
      } 
    } 

    public static void convert(String inputBinaer) throws NumberFormatException{ 

     char [] puffer; 
     int dez = 0; 

     puffer = inputBinaer.toCharArray(); 

     for(int i=0;i<puffer.length;i++){ 
       if(puffer[i]== '1'){ 
      dez = (int) (dez + Math.pow(2, puffer.length-1-i)); 
      } 
      } 

     System.out.println("The decimal number is: " + dez); 

    } 

} 
+0

您的'convert'方法永遠不會拋出'NumberFormatException'。你爲什麼不扔它? –

+0

我不這樣做後面的轉換方法?我需要做些什麼才能獲得NumberFormatException?我現在一直在嘗試幾個小時。 – user3080315

+0

你確實在'convert'中有什麼地方會拋出異常呢?幫助我們至少了解你的期望。 –

回答

2

要訪問catch塊,必須在某處拋出異常。通常,Java方法會爲你做這件事,但是由於你自己解析了所有東西,你將不得不拋出異常。一種方法是到throw語句添加到每當遇到一個無效的數字的convert()方法:

import java.util.Scanner; 

public class BinaryStringToNumber { 

    public static void main(String[] args) { 

     String inputBinaer; 
     Scanner input = new Scanner(System.in); 
     System.out.print("Type in a binary number: "); 
     inputBinaer = input.next(); 
     input.close(); 

     try 
      { 
      convert(inputBinaer); 
      } 
      catch (NumberFormatException e) 
      { 
      System.out.println("Just numbers!"); 
      } finally { 
      System.out.println("Finally"); 
      } 
    } 

    public static void convert(String inputBinaer) throws NumberFormatException{ 

     char [] puffer; 
     int dez = 0; 

     puffer = inputBinaer.toCharArray(); 

     for(int i=0;i<puffer.length;i++){ 
       if(puffer[i]== '1'){ 
      dez = (int) (dez + Math.pow(2, puffer.length-1-i)); 
      } else if (puffer[i] != '0') { 
        throw new NumberFormatException("Invalid digit: " + puffer[i]); 
      } 
      } 

     System.out.println("The decimal number is: " + dez); 

    } 

} 
+0

非常感謝你的工作!我想我現在已經明白了。我會讀更多的文章。 – user3080315

+0

@ user3080315。樂意效勞。顯示您的欣賞的正確方法是選擇答案並可能使其滿意。 –

0

你需要指定你在哪裏丟的NumberFormatException異常。我會在if循環中檢查char,如果它不是'0'或'1',我會拋出一個異常。希望我幫助。

-1

如果輸入錯誤,您可以丟棄NumberFormatException。這在Java中是允許的。