Scanner读取用户输入时跳过nextLine()是因为nextInt()等方法残留换行符,应统一用nextLine()后转换类型,或在nextInt()后加scanner.nextLine()清缓存。
用 Scanner 读取用户输入时为什么程序直接跳过?
常见现象是调用 nextLine() 前用了 nextInt() 或 nextDouble(),导致换行符残留,nextLine() 立刻返回空字符串。
- 根本原因是
nextInt()只读数字,不消费后续的\n;而nextLine()会读取并吃掉这个换行符 - 稳妥做法:统一用
nextLine(),再手动转类型,比如Integer.parseInt(scanner.nextLine()) - 若必须混用,记得在
nextInt()后加一句scanner.nextLine()清掉缓存
如何组织主逻辑避免 main 方法变成“意大利面代码”?
新手常把所有功能(输入、计算、输出)全塞进 main,导致难以调试和复用。
- 把每块职责拆成独立方法:比如
getUserChoice()、calculateSum(int a, int b)、printResult(double result) - 参数和返回值要明确——别传
Scanner进去又传出来,只传需要的数据,Scanner实例保留在main里管理 - 方法名用动宾结构,比如
readStudentName()比getName()更不易歧义
退出机制写成 while (true) + break 安全吗?
可以,但容易漏掉清理或导致控制流混乱。更清晰的做法是用带条件的循环变量。