2013-12-17 71 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中是允许的。