import java.io.*; import java.util.Arrays; import java.util.Scanner; public class FileTest { public static void main(String[] args) throws IOException { // 请在Begin-End间修改代码 /********** Begin **********/ // 接收控制台输入的两个值 Scanner scanner = new Scanner(System.in); double x = scanner.nextInt(); double y = scanner.nextInt(); // 打印接收两个值的加减乘结果(输入的第一个数当被减数,第二个数当减数,保留两位小数) System.out.println(String.format("%.2f", x+y)); System.out.println(String.format("%.2f", x-y)); System.out.println(String.format("%.2f", x*y)); /********** End **********/ } }
时间: 2025-05-31 17:53:33 浏览: 13
### 解决方案:Java 中 Scanner 输入类型异常的处理与加减乘运算实现
以下是针对输入类型异常的解决方案以及完成两个数的加减乘运算并保留两位小数的具体实现。
---
#### 完整代码示例
```java
import java.text.DecimalFormat;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ArithmeticOperations {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
DecimalFormat df = new DecimalFormat("#.00");
try {
System.out.print("请输入第一个数字: ");
double num1 = validateAndReadDouble(scanner);
System.out.print("请输入第二个数字: ");
double num2 = validateAndReadDouble(scanner);
// 加法操作
double additionResult = num1 + num2;
System.out.println("两数之和为: " + df.format(additionResult));
// 减法操作
double subtractionResult = num1 - num2;
System.out.println("两数之差为: " + df.format(subtractionResult));
// 乘法操作
double multiplicationResult = num1 * num2;
System.out.println("两数相乘结果为: " + df.format(multiplicationResult));
} catch (InputMismatchException e) {
System.err.println("输入错误! 请确保只输入有效的数字.");
} catch (Exception e) {
System.err.println("发生未知错误: " + e.getMessage());
} finally {
scanner.close();
System.out.println("程序已结束, 资源已释放.");
}
}
private static double validateAndReadDouble(Scanner scanner) throws InputMismatchException {
while (!scanner.hasNextDouble()) {
System.out.println("输入无效,请重新输入一个合法的数字:");
scanner.next(); // 清除非法输入
}
return scanner.nextDouble();
}
}
```
---
#### 代码详解
1. **`DecimalFormat` 的使用**
使用 `DecimalFormat` 来格式化输出结果,确保所有计算结果显示为保留两位小数的形式[^6]。
2. **异常捕获机制**
- 利用 `try-catch` 块捕获可能发生的 `InputMismatchException` 或其他类型的异常。
- 当用户输入非数字字符时,提示用户重新输入,并清除缓冲区中的非法数据[^7]。
3. **辅助方法 `validateAndReadDouble`**
创建了一个专门的方法 `validateAndReadDouble`,用于验证用户输入是否为合法的双精度浮点数。如果输入不合法,则循环提示直到用户提供有效输入[^8]。
4. **资源管理**
在 `finally` 块中关闭 `Scanner` 对象,确保无论是否发生异常都能正确释放资源[^9]。
5. **算术运算逻辑**
实现了基本的加法、减法和乘法运算,并利用 `DecimalFormat` 格式化输出结果,满足题目要求的保留两位小数需求[^10]。
---
#### 示例运行结果
假设用户依次输入以下内容:
- 用户第一次输入字母 `"abc"` 替代数字时,程序会提示:
```
输入无效,请重新输入一个合法的数字:
```
- 用户随后输入 `10` 和 `3.5`,程序将输出如下结果:
```
两数之和为: 13.50
两数之差为: 6.50
两数相乘结果为: 35.00
程序已结束, 资源已释放.
```
---
###
阅读全文
相关推荐












