如何使用异常处理修复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); } }
代码解释
try代码块:把所有可能抛出异常的代码(datoAux.length()和Integer.parseInt(datoAux))包裹起来,一旦执行时触发异常,就会跳转到对应的catch块处理。NullPointerException捕获:专门处理datoAux为null的情况,给用户清晰的错误提示,也可以扩展逻辑让用户重新输入符合长度要求的名字。NumberFormatException捕获:处理字符串无法转换为整数的场景,既给出友好提示,也打印异常的具体信息帮助调试。finally块:可选模块,用来执行必须完成的资源清理操作,比如关闭Scanner避免资源泄漏。
内容的提问来源于stack exchange,提问作者Angel javier tiburcio viveros
相关产品推荐
相关产品推荐

