Java如何使用Scanner读取同一行中的两种不同数据类型
问题原因
你当前的代码存在读取逻辑错误:
Scanner scanner = new Scanner(System.in); String befehl = scanner.nextLine(); double wert = scanner.nextDouble();
scanner.nextLine()会直接把一整行输入(比如示例中的Drive 5完整内容)全部读取并赋值给befehl,后续执行scanner.nextDouble()时会等待你输入第二行内容,无法读取同一行内的数字。
解决方法
共有两种常用实现方案:
- 方案1:直接使用Scanner默认分隔规则读取
利用Scanner默认以空白字符为分隔的特性直接读取,代码最简洁:
Scanner scanner = new Scanner(System.in); // 读取第一段非空白字符作为字符串值 String befehl = scanner.next(); // 自动跳过中间的空白字符,读取后续的浮点数值 double wert = scanner.nextDouble();
只要输入的两个值在同一行用空格分隔,即可正常读取。
- 方案2:先读取整行再拆分处理
如果需要自定义分隔规则、或者要做输入合法性校验,可先读取完整行再拆分处理:
Scanner scanner = new Scanner(System.in); // 读取完整的一行输入 String inputLine = scanner.nextLine(); // 按空白字符拆分,支持多个空格分隔的场景 String[] inputParts = inputLine.split("\\s+"); String befehl = inputParts[0]; double wert = Double.parseDouble(inputParts[1]);
这种方案可额外扩展校验逻辑,比如判断拆分后的数组长度是否为2、第二个值是否可正常转为浮点型,避免非法输入导致程序崩溃。
内容的提问来源于stack exchange,提问作者ineedhelp
相关产品推荐
相关产品推荐

