Java如何精简询问用户是否继续执行的循环代码并提升运行效率
Java代码精简方案
优化后代码(兼容Java 11+)
import java.util.Scanner; import java.util.stream.IntStream; public class NumberPrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int enter; do { // 输入两个数字 System.out.print("Enter first number: "); int fnum = sc.nextInt(); System.out.print("Enter second number: "); int snum = sc.nextInt(); // 统一处理升序/降序输出 int step = fnum <= snum ? 1 : -1; IntStream.iterate(fnum, n -> n != snum + step, n -> n + step) .forEach(System.out::println); // 询问是否继续 System.out.print("Enter 1 to continute, enter any number to end: "); enter = sc.nextInt(); } while (enter == 1); // 退出提示 String line = "*".repeat(48); System.out.printf("%s\n%s\n******************Thank you*********************\n%s\n%s\n", line, line, line, line); sc.close(); } }
低版本Java兼容版(Java 8+)
如果用不了Java 11的新特性,可以使用下面的版本,功能完全一致:
import java.util.Scanner; public class NumberPrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int enter; do { System.out.print("Enter first number: "); int fnum = sc.nextInt(); System.out.print("Enter second number: "); int snum = sc.nextInt(); // 统一循环逻辑 int step = fnum <= snum ? 1 : -1; for (int i = fnum; fnum <= snum ? i <= snum : i >= snum; i += step) { System.out.println(i); } System.out.print("Enter 1 to continute, enter any number to end: "); enter = sc.nextInt(); } while (enter == 1); // 退出提示 String line = "************************************************"; System.out.println(line + "\n" + line + "\n******************Thank you*********************\n" + line + "\n" + line); sc.close(); } }
核心优化点
- 完全消除重复代码:将原来重复两次的数字输入、遍历输出逻辑全部整合到do-while循环中,不需要额外提前执行一次逻辑,代码量减少50%以上
- 统一升序/降序输出逻辑:通过步长变量
step合并两个分支的while循环,不需要分开写两套遍历逻辑,可读性大幅提升 - 简化退出逻辑:去掉冗余的
System.exit(0)调用,循环条件不满足时程序会自然执行退出提示后结束,逻辑更通顺 - 性能无损耗:所有优化都是语法层面的精简,运行效率和原有代码完全一致,甚至因为减少了分支判断会略快于原代码
内容的提问来源于stack exchange,提问作者Ban
相关产品推荐
相关产品推荐

