如何让程序在用户输入字符串而非double时不崩溃并提示输入数字?
嘿,这个问题我之前写Java作业的时候也踩过坑!你的代码现在的问题是,一旦用户输入非数字内容,nextDouble()会直接抛出InputMismatchException,导致程序直接崩溃。另外还有个小细节可以优化:你不需要在每次循环里都新建Scanner实例,只需要在方法开头创建一次就够啦,不然会浪费资源。
下面给你两种实用的解决方案,你可以根据需求选:
方案1:主动判断输入合法性(推荐)
用Scanner的hasNextDouble()方法提前检查输入是否是有效的数字,这样能避免异常抛出,更高效:
import java.util.Scanner; public static double[] getScores() { int numScores = 8; double[] scores = new double[numScores]; // 只初始化一次Scanner Scanner ip = new Scanner(System.in); for (int a = 0; a < numScores; ) { // 这里先不自动递增索引 System.out.println("Enter a score:"); if (ip.hasNextDouble()) { // 输入是合法数字,读取并移动索引 scores[a] = ip.nextDouble(); a++; } else { System.out.println("抱歉,请输入有效的数字哦!"); // 必须把无效的输入内容"吃掉",不然会一直循环读取这个无效值 ip.next(); } } ip.close(); // 用完记得关闭Scanner释放资源 return scores; }
方案2:捕获异常处理
如果更习惯用异常处理的思路,也可以通过捕获InputMismatchException来处理非法输入:
import java.util.InputMismatchException; import java.util.Scanner; public static double[] getScores() { int numScores = 8; double[] scores = new double[numScores]; Scanner ip = new Scanner(System.in); for (int a = 0; a < numScores; ) { System.out.println("Enter a score:"); try { scores[a] = ip.nextDouble(); a++; // 只有输入正确时才递增索引 } catch (InputMismatchException e) { System.out.println("哎呀,你输入的不是数字,请重新输入!"); ip.next(); // 同样要消费掉无效输入,避免死循环 } } ip.close(); return scores; }
小提醒
不管用哪种方法,都要记得调用ip.next()处理无效输入,不然Scanner会一直停在那个非法输入上,导致循环无限执行哦!
内容的提问来源于stack exchange,提问作者Amadou Toure
相关产品推荐
相关产品推荐

