Java程序运行意外提前终止 无法接收用户输入问题求助
错误根因
你编写的代码中没有调用Scanner的输入读取方法,直接将Scanner对象本身与字符串"hi"做等值判断,该判断永远返回false,程序不会等待用户输入就会执行完所有逻辑直接终止。
可正常运行的修复代码
import java.util.Scanner; class Main { public static void main(String[] args) { System.out.println("Hey!"); Scanner sc = new Scanner(System.in); // 读取用户输入的一行内容再做等值判断 String input = sc.nextLine(); if ("hi".equals(input)) { System.out.println("What's up?"); } sc.close(); } }
代码优化方案
- 替换通配符导入为指定类导入:将
import java.util.*;改为import java.util.Scanner;,减少编译时的类检索开销,代码可读性也更强 - 使用try-with-resources语法自动释放资源:无需手动调用
close()方法,避免忘记关闭资源导致的流泄漏,优化后代码如下:
import java.util.Scanner; class Main { public static void main(String[] args) { System.out.println("Hey!"); try (Scanner sc = new Scanner(System.in)) { if ("hi".equals(sc.nextLine())) { System.out.println("What's up?"); } } } }
- 常量前置调用equals方法:如上代码所示将"hi"放在equals前侧,可避免用户输入为null时抛出空指针异常
- 当前逻辑属于极简交互场景,没有可进一步压榨性能的空间,上述优化已经是当前场景下的最优实现。
内容的提问来源于stack exchange,提问作者SamiOsman
相关产品推荐
相关产品推荐

