输入浮点数时Java程序报错,如何修改Store_20190808001代码?
问题修复方案
嗨,我来帮你搞定这个问题~
你遇到的报错核心原因是Scanner的输入方法和你输入的数据类型不匹配:你现在用nextInt()读取Ayran的数量、nextLong()读取价格,但这两个方法只能接收整数输入。当你输入0.5、3.5这类带小数点的浮点数时,Scanner会直接抛出InputMismatchException,导致程序崩溃。
修复步骤:
- 把存储数量和价格的变量类型改成浮点型(推荐用
double,精度比float更高,更适合处理货币、数量类数值) - 对应的Scanner读取方法换成
nextDouble()(如果坚持用float就用nextFloat()) - 额外注意:如果你的输入是用逗号加空格分隔的(比如
0.5, 3.5),需要给Scanner设置自定义分隔符,否则第二个数值会读取失败
修改后的完整代码:
import java.util.Scanner; public class Store_20190808001 { public static void main(String[] args) { Scanner tara = new Scanner(System.in); // 设置分隔符:支持逗号+任意空格,或者默认的空格分隔 tara.useDelimiter(",\\s*|\\s+"); System.out.println("Story Inventory Enter"); System.out.print("Enter the number of Ayran we have: "); // 用double存储数量,支持小数输入 double ayransayisi = tara.nextDouble(); System.out.print("Enter the cost of Ayran: "); // 用double存储价格,支持小数输入 double ayranparasi = tara.nextDouble(); System.out.println("thanks"); // 利润计算直接用double类型,避免精度损失 double kar = ayranparasi * ayransayisi; System.out.println("kar " + kar); tara.close(); // 记得关闭Scanner,避免资源泄漏 } }
补充说明:
- 如果你的输入是用空格分隔(比如
0.5 3.5),可以去掉tara.useDelimiter(...)这一行,Scanner默认会用空格作为分隔符 - 选择
double而非float是因为前者精度更高,能减少数值计算时的误差 - 最后调用
tara.close()是良好的编码习惯,避免占用不必要的系统资源
内容的提问来源于stack exchange,提问作者Yusuf T.
相关产品推荐
相关产品推荐

