You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用异常处理修复Java代码中的两处错误(含NumberFormatException报错)

用异常处理修复你的Java代码错误

咱们先拆解一下你代码里的两个潜在错误,以及对应的异常处理方案:

问题1:NullPointerException 风险

当你输入的名字长度≤2时,datoAux不会被赋值(还是初始的null),这时候执行int Longuitud=datoAux.length();就会抛出**NullPointerException**——你现在没碰到这个问题是因为输入的名字长度超过了2,但如果输入类似"Li"就会触发。

问题2:NumberFormatException(你当前遇到的异常)

datoAux的值是"Hola"+datoLeido,比如"Holaangel",这显然不是一个合法的整数,调用Integer.parseInt(datoAux)必然会抛出NumberFormatException,也就是你看到的报错。


修复后的代码(带异常处理)

import java.util.Scanner;

public class Maria { 
    public static void main(String[] args) { 
        String datoLeido=""; 
        String datoAux=null; 
        int datoConvertido; 
        Scanner teclado=new Scanner(System.in); 
        System.out.println("Favor de ingresar el nombre"); 
        datoLeido=teclado.nextLine(); 
        
        if(datoLeido.length()>2) 
            datoAux="Hola"+datoLeido; 

        try {
            // 可能抛出NullPointerException的代码
            int Longuitud=datoAux.length(); 
            System.out.println("Longitud de datoAux: " + Longuitud);
            
            // 可能抛出NumberFormatException的代码
            datoConvertido=Integer.parseInt(datoAux); 
            System.out.println("Valor convertido a entero: " + datoConvertido);
        } catch (NullPointerException e) {
            System.err.println("Error: El nombre ingresado es demasiado corto (≤2 caracteres), datoAux está vacío.");
            // 可选:这里可以添加重新输入的逻辑,让用户补全符合要求的名字
        } catch (NumberFormatException e) {
            System.err.println("Error: No se puede convertir \"" + datoAux + "\" a un número entero.");
            System.err.println("Detalles del error: " + e.getMessage());
        } finally {
            // 可选:执行不管有没有异常都要完成的操作,比如关闭输入流
            teclado.close();
        }
        
        System.out.println("datoAux: " + datoAux); 
    } 
}

代码解释

  1. try代码块:把所有可能抛出异常的代码(datoAux.length()和Integer.parseInt(datoAux))包裹起来,一旦执行时触发异常,就会跳转到对应的catch块处理。
  2. NullPointerException捕获:专门处理datoAux为null的情况,给用户清晰的错误提示,也可以扩展逻辑让用户重新输入符合长度要求的名字。
  3. NumberFormatException捕获:处理字符串无法转换为整数的场景,既给出友好提示,也打印异常的具体信息帮助调试。
  4. finally块:可选模块,用来执行必须完成的资源清理操作,比如关闭Scanner避免资源泄漏。

内容的提问来源于stack exchange,提问作者Angel javier tiburcio viveros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:34:08