
实现用户交互式程序循环控制
在开发交互式应用程序时,我们经常需要让程序根据用户的选择来决定是继续执行某项操作,还是终止程序。例如,一个简单的计算器程序可能需要用户进行多次计算,直到用户明确选择退出。实现这种功能的核心在于使用循环结构来包裹核心业务逻辑,并通过用户输入来控制循环的终止条件。
核心机制:do-while循环与用户输入
Java提供了多种循环结构,其中do-while循环非常适合实现“至少执行一次,然后根据条件判断是否继续”的场景。其基本语法如下:
do {
// 循环体:需要重复执行的代码
// 获取用户输入,判断是否继续
} while (条件表达式); // 当条件表达式为true时,循环继续结合java.util.Scanner类来获取用户输入,我们可以轻松地实现程序流程的控制。用户输入一个特定的值(例如1表示继续,0表示退出),程序根据这个值来更新循环的条件表达式。
完整示例:一个可重复执行的计算器
下面我们将通过一个可重复执行的简单计算器示例,演示如何将上述概念应用于实际代码中。这个计算器将允许用户进行加减乘除运算,并在每次运算后询问用户是否继续。
本文档主要讲述的是Android中JNI编程的那些事儿;JNI译为Java本地接口。它允许Java代码和其他语言编写的代码进行交互。在android中提供JNI的方式,让Java程序可以调用C语言程序。android中很多Java类都具有native接口,这些接口由本地实现,然后注册到系统中。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
import java.util.InputMismatchException;
import java.util.Scanner;
public class InteractiveCalculator {
public static void main(String[] args) {
// 定义一个变量来存储用户的操作指令,初始值可以设置为任意非退出值
int command = 1;
// 使用try-with-resources确保Scanner资源被正确关闭
try (Scanner scanner = new Scanner(System.in)) {
do {
try {
System.out.println("请输入第一个数字: ");
int num1 = scanner.nextInt();
System.out.println("请输入第二个数字: ");
int num2 = scanner.nextInt();
System.out.println("请选择操作 (+, -, *, /): ");
String operation = scanner.next();
System.out.print("计算结果: ");
// 使用switch语句处理不同的运算,提高代码可读性
switch (operation) {
case "+":
System.out.println(num1 + num2);
break;
case "-":
System.out.println(num1 - num2);
break;
case "*":
System.out.println(num1 * num2);
break;
case "/":
if (num2 == 0) {
System.out.println("错误:除数不能为零!");
} else {
System.out.println((double) num1 / num2); // 避免整数除法截断
}
break;
default:
System.out.println("错误:无效的操作符!");
}
} catch (InputMismatchException e) {
System.out.println("输入错误:请输入有效的数字!");
scanner.next(); // 消费掉错误的输入,防止无限循环
} catch (Exception e) {
System.out.println("发生未知错误:" + e.getMessage());
}
System.out.println("\n--------------------");
System.out.println("输入 '1' 继续,输入 '0' 退出: ");
// 获取用户是否继续的指令
// 增加输入验证,确保用户输入的是0或1
while (!scanner.hasNextInt()) {
System.out.println("无效输入,请输入 '1' 或 '0': ");
scanner.next(); // 消费掉无效输入
}
command = scanner.nextInt();
} while (command == 1); // 当command为1时,循环继续执行
System.out.println("程序已退出。");
} // try-with-resources 会自动关闭 scanner
}
}关键点与最佳实践
- do-while循环的选择: do-while循环非常适合这种“先执行一次,再判断是否继续”的场景。如果业务逻辑可能不需要执行,则应考虑使用while循环。
- Scanner资源管理: Scanner对象在使用完毕后应该被关闭,以释放系统资源。使用try-with-resources语句(如try (Scanner scanner = new Scanner(System.in)))是最佳实践,它能确保Scanner在try块结束时自动关闭,即使发生异常也不例外。
- 程序优雅退出: 在上述示例中,当main方法执行完毕时,程序会自动终止,无需显式调用System.exit(0)。System.exit()通常用于在程序中途遇到不可恢复的严重错误时强制退出,或者在某些特定场景下需要立即终止JVM。对于这种用户控制的循环退出,让main方法自然结束是更优雅的方式。
- 代码可读性: 针对不同的操作,使用switch语句比一系列if-else if链更清晰、更易于维护。
- 输入验证与异常处理: 在实际应用中,用户输入往往不可预测。在获取用户输入(如数字或操作符)时,应加入适当的输入验证和异常处理(如InputMismatchException),以增强程序的健壮性,防止因无效输入导致程序崩溃。在示例中,我们添加了对非数字输入的处理,以及对除数为零的检查。
- 清除缓冲区: 当使用nextInt()、nextDouble()等方法读取数字后,Scanner的缓冲区中可能会留下换行符。如果紧接着使用nextLine()读取字符串,可能会读到空行。虽然本例中没有直接出现nextLine(),但了解这一点对于避免潜在的输入问题很重要。对于本例,scanner.next()可以很好地处理操作符和命令。
通过遵循这些原则和实践,您可以构建出更加健壮、用户友好且易于维护的交互式Java应用程序。
立即学习“Java免费学习笔记(深入)”;









