在Java中实现异常的问题

时间:2013-12-17 21:11:12

标签: java exception char int try-catch

我想编写一个程序来转换十进制的二进制数。 我发现问题是我甚至无法获得“追踪路径”。 我也知道我必须用char更改某些东西,但我绝对不会得到一个有效的解决方案。谢谢。

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);

    }

}

3 个答案:

答案 0 :(得分: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);

    }

}

答案 1 :(得分:0)

您需要指定抛出NumberFormatException的位置。我在for循环中放了一个if来检查char,如果它不是'0'或'1',我会抛出异常。希望我帮忙。

答案 2 :(得分:-1)

如果输入错误,您可以抛出NumberFormatException。这在Java中是允许的。