【问题标题】:Problems with implementing exceptions in Java在 Java 中实现异常的问题
【发布时间】:2013-12-17 21:11:12
【问题描述】:

我想编写一个将二进制数转换为十进制数的程序。 我发现问题是我什至无法获得“捕获路径”。 我也知道我必须用 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);

    }

}

【问题讨论】:

  • 您的convert 方法永远不会抛出NumberFormatException。为什么不扔呢?
  • 我不是在 convert 方法后面做的吗?我必须做什么才能获得 NumberFormatException?我已经尝试了好几个小时了。
  • 您认为在convert 的哪个位置会引发异常?帮助我们至少了解您的期望。
  • 既然给出了可接受的答案,这里有个小提示,请使用 dez += Math.pow(2, puffer.length-1-i)); 而不是 dez = (int) (dez + Math.pow(2, puffer.length-1-i));,这样对眼睛的痛苦会减少(恕我直言),不用担心编译器会正确处理跨度>

标签: java exception char int try-catch


【解决方案1】:

要到达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);

    }

}

【讨论】:

  • 非常感谢它有效!我想我现在明白了。我会阅读更多的文章。
  • @user3080315。乐意效劳。表达您的感激之情的正确方法是选择答案并可能投票。
【解决方案2】:

您需要指定在哪里抛出 NumberFormatException。我会在 for 循环中放置一个 if 来检查字符,如果它不是“0”或“1”,我会抛出异常。希望我能帮上忙。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2017-09-17
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      相关资源
      最近更新 更多