Integer.parseInt转换文本值报错求助:Java代码执行异常
解决Integer.parseInt转换时的Conversion Error问题
嘿,我来帮你搞定这个转换错误的问题!你遇到的其实是NumberFormatException(也就是你说的Conversion error),本质是传给Integer.parseInt()的字符串不是有效的整数格式,咱们一步步排查和解决:
一、先搞懂错误根源
你的代码里有两个转换点容易出问题:
int intAmt = Integer.parseInt(amt);:amt来自scr.getText(),如果用户输入了空格、字母、小数点,或者直接留空,转换就会失败int intBal = Integer.parseInt(bal);:bal是从字符串a截取的最后一段,如果a的格式不符合预期(比如没有空格、截取后的内容带非数字字符),也会触发错误
二、给你一套健壮的修复代码
我给你调整了逻辑,加上输入验证和异常捕获,确保程序不会因为格式问题崩溃:
bt36.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ // 先处理用户输入的金额:去掉前后空格,验证格式 String amt = scr.getText().trim(); if (!amt.matches("\\d+")) { JOptionPane.showMessageDialog(null, "请输入有效的整数金额哦"); return; } // 处理余额截取:先检查字符串a的格式是否正确 int spaceIndex = a.lastIndexOf(" "); String bal; if (spaceIndex == -1) { JOptionPane.showMessageDialog(null, "余额信息格式不对,请检查"); return; } else { bal = a.substring(spaceIndex + 1).trim(); // 再验证余额是否是纯数字 if (!bal.matches("\\d+")) { JOptionPane.showMessageDialog(null, "余额格式异常"); return; } } // 安全执行转换和业务逻辑 try { int intAmt = Integer.parseInt(amt); int intBal = Integer.parseInt(bal); int remBal; if ((intBal - intAmt) < 0){ JOptionPane.showMessageDialog(null, "insufficient funds, try a lower amount"); } else { remBal = intBal - intAmt; // 这里可以补充你的后续逻辑,比如更新余额显示 JOptionPane.showMessageDialog(null, "取款成功!剩余余额:" + remBal); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "数据格式错误,请检查输入或余额信息"); ex.printStackTrace(); // 控制台打印异常细节,方便你调试 } } });
三、额外的小提醒
- 如果你的业务允许小数金额(比如带角分的钱),别用
Integer.parseInt(),换成Double.parseDouble()或者BigDecimal更合适 - 永远不要假设用户输入/截取的内容一定符合预期,前置验证+异常捕获能让你的程序稳很多
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

