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

如何通过Scanner输入double值 解决二次函数代码输入不匹配异常

问题根因
  • 核心原因是Scanner类默认继承当前操作系统的区域设置(Locale),部分地区的本地化规则中小数分隔符为逗号(,)而非英文句号(.),当你输入5.9这类用.作为小数分隔符的数值时,Scanner无法匹配double类型的格式规则,就会抛出InputMismatchException异常。
  • 次要排查点:确认输入内容没有额外的空格、特殊字符,且确实是合法的数值格式。
修复方案

直接强制指定Scanner使用英文区域规则,即可支持.作为小数分隔符,修改步骤如下:

  1. 导入Locale类:在代码开头新增import java.util.Locale;
  2. 初始化Scanner后调用useLocale方法设置为美式区域规则:static Scanner scan = new Scanner(System.in).useLocale(Locale.US);
优化后完整代码
import java.util.Locale;
import java.util.Scanner;

public class Main {
    // 强制设置Scanner使用英文区域规则,支持.作为小数分隔符
    static Scanner scan = new Scanner(System.in).useLocale(Locale.US);
    public static void main(String[] args) {
        Wrappers.quadraticWrapper(scan);
    }
    static class Wrappers {
        public static void quadraticWrapper(Scanner s){
            System.out.print("Insert for a: ");
            double a = s.nextDouble();
            // 新增二次方程合法校验:a不能为0
            if(a == 0) {
                System.out.println("参数a不能为0,不是二次方程");
                return;
            }
            System.out.print("insert for b: ");
            double b = s.nextDouble();
            System.out.print("insert for c: ");
            double c = s.nextDouble();
            double discriminant = Math.pow(b, 2) - 4 * a * c;
            // 新增判别式校验,避免负数开平方得到NaN
            if(discriminant < 0) {
                System.out.println("判别式小于0,无实数根");
                return;
            }
            printArr(Formulas.quadraticF(a, b, c));
        }
        private static void printArr(double[] arr) {
            System.out.println("[");
            for (double d : arr) {
                System.out.print(d + " ");
            }
            System.out.println("]");
        }
    }
    static class Formulas{
        public static double[] quadraticF(double a, double b, double c) {
            double[] arr = new double[2];
            double discriminant = Math.sqrt(Math.pow(b, 2) - 4 * a * c);
            arr[0] = (-b + discriminant)/(2 * a);
            arr[1] = (-b - discriminant)/(2 * a);
            return arr;
        }
    }
}
额外优化说明
  • 新增了二次方程合法性校验:避免a为0时出现除以0的异常
  • 新增了判别式校验:避免判别式小于0时开平方得到非数字(NaN)的问题
  • 重复计算的判别式提取为公共变量,减少重复计算

内容的提问来源于stack exchange,提问作者Mile Stanislavov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:21:02