当前位置: 首页 > 知识库问答 >
问题:

为什么无法捕获NumberFormatException?[关闭]

卫逸春
2023-03-14

在我的代码中,在使用非整数(例如17.9)给出年龄值后,我无法捕获异常
另外,我的最终没有打印出来<是否有语法错误??

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class isVote {
    public static void vote(int age){
        if (age>18 || age == 18) {
            System.out.println("Person can vote");
        } else {
            System.out.println("Person cannot vote");
        }
    }
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter age : ");
        int age = Integer.parseInt(br.readLine());
        try {
            vote(age);
        } catch (NumberFormatException e) {
            System.out.println("Invalid age");
        }
        finally{
            System.out.println("This is final ");
        }
    }
}

共有3个答案

海翔宇
2023-03-14

我nteger.parseInt会抛出未经检查的NumberFormatException,如果我们尝试通过它传递尝试转换非整数值。
以下示例抛出未经检查的异常。

Integer.parseInt("two")
Integer.parseInt("2.2")

正如我们现在所知,parseInt抛出异常。我们可以在try-catch中调用parseInt方法来处理异常。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {  
public static void vote(int age){
        if (age>=18) {
            System.out.println("Person can vote");
        } else {
            System.out.println("Person cannot vote");
        }
    }
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter age : ");
      String age = br.readLine();
        try {
          vote(Integer.parseInt(age));
        } catch (NumberFormatException e) {
            System.out.println("Invalid age : "+age);
        } finally {
            if (br!=null)
               br.close();
        }
    }
}

最后,块具有不同的功能,它不用于捕获try-catch中的异常。如果不使用,finally可以用于关闭打开的流,以避免资源泄漏。最后,不会在代码中调用块,因为代码在try块之前中断。

孔鸿远
2023-03-14
  1. Try-catch块的作用是定义一个代码块,该代码块在执行时要进行错误测试。catch语句允许您定义在try块中发生错误时要执行的代码块。在您的情况下,如果用户输入整数以外的任何输入,它将被“Catch”块捕获,并将打印“Invalid Age”。因此,这个用户输入语句应该包含在try块中
刁瀚昂
2023-03-14

由于该方法,parseInt()将抛出NumberFormatException,您需要将其包含在try块中。

只需在try块中包含输入的行,如下所示:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class isVote {
    public static void vote(int age){
        if (age>18 || age == 18) {
            System.out.println("Person can vote");
        } else {
            System.out.println("Person cannot vote");
        }
    }
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter age : ");
        try {
            int age = Integer.parseInt(br.readLine());
            vote(age);
        } catch (NumberFormatException e) {
            System.out.println("Invalid age");
        }
        finally{
            System.out.println("This is final ");
        }
    }
}

输入:<代码>17.9

输出:

Enter age : Invalid age
This is final 
 类似资料:
  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节:

  • 问题内容: 我正在尝试捕获“ android.database.sqlite.SQLiteException:错误代码5:数据库已锁定”异常,并带有: 由于某些原因,我仍然会收到错误消息,并且LogCat中没有显示“ caught”。我尝试捕获一般的“异常”,但这仍然行不通。怎么了? 更新, 我发现了这个问题,这确实很奇怪:由于某种原因,将goto10声明的db.insert()更改为db.ins

  • 问题内容: 尽管我在日志中看到了异常,但似乎无法捕获到约束违例异常。 实体 我正试图抓住它 -它永远不会到达捕获块。 当我使用 捕获(异常e) 我捕获到“ javax.transaction.RollbackException:ARJUNA016053:无法提交事务。” 这是错误日志: 我究竟做错了什么 ? 更新>> 我当前的代码是: 日志是 环境:PostgreSQL 9.2 JBoss AS

  • 我使用的是Spring Boot 2和Spring Boot starter数据jpa以及底层的MariaDB。 我有一个带有唯一键“用户名”的表。如果违反了此约束,我想捕获,但似乎Spring正在记录并且不会在记录后重新抛出(我最好的猜测)。被抛出。 我想在中捕获。 以下是几段代码片段: 堆栈跟踪:

  • 问题内容: 我的IDE给我该行的错误 我试着抓住,但是并没有使错误消失。有什么想法吗? 问题答案: 扩展了,所以您的IDE本身就有了更深的麻烦-也许库导入被搞砸了?

  • 我正在尝试捕获SocketTimeoutException,以便我的套接字保持活动状态,并且可以继续读取程序。不幸的是,无论我如何尝试捕获读取超时,我都无法捕获,因此应用程序关闭。