为何检查字符串能否解析为double时会出现错误?
解决字符串转Double时的NumberFormatException问题
嘿,我来帮你搞定这个报错问题!你现在遇到的NumberFormatException,核心原因是你虽然调用了FormatChecker.canParseDouble来检查字符串是否能转成double,但完全没用到它的返回值——不管检查结果是啥,你都直接执行了Double.parseDouble,所以输入"pi"这种非数字字符串时,自然就炸了。
咱们一步步来修正:
问题代码的核心缺陷
你这段代码里的FormatChecker.canParseDouble(realConstant);只是执行了检查,但没有把检查结果存下来做判断。相当于你问了“这个字符串能转成数字吗?”,但不管答案是能还是不能,你都直接去转了,当然会出错。
修改后的代码
把检查结果存到一个布尔变量里,然后用if-else分支处理:
public static void main(String[] args) { SimpleReader in = new SimpleReader1L(); SimpleWriter out = new SimpleWriter1L(); out.println("Welcome to constant approximator"); out.println("Please enter in a constant to be estimated"); String realConstant = in.nextLine(); // 存储检查结果 boolean isValidDouble = FormatChecker.canParseDouble(realConstant); if (isValidDouble) { // 只有检查通过时才解析 double test = Double.parseDouble(realConstant); out.print(test); } else { // 检查不通过时提示用户输入无效 out.println("Oops! The input you entered isn't a valid double number."); } in.close(); out.close(); }
为什么这样能解决问题?
当你输入"pi"时,FormatChecker.canParseDouble会返回false,程序就会进入else分支,跳过Double.parseDouble的调用,自然就不会抛出NumberFormatException了。如果输入的是像"3.14159"这样的有效数字,就会正常解析并输出。
另外提个小建议:你原来代码里提前声明的double test = 0;其实没必要,直接在if分支里声明并赋值就好,更简洁~
内容的提问来源于stack exchange,提问作者trumph15bx
相关产品推荐
相关产品推荐

