Apache NetBeans运行Java代码System.out.print输出异常是编译器问题吗
问题排查结论
这个问题是代码写法逻辑问题,和Apache NetBeans编译器没有关联。
问题原因
- Java的
System.out默认使用行缓冲机制:只有输出内容包含换行符、缓冲区满、或者程序主动调用flush()时,才会把缓冲区的内容真正打印到控制台。你使用System.out.print()输出提示语时,内容末尾没有换行,所以提示语会暂存在缓冲区内没有立刻输出,程序先进入了等待用户输入的逻辑,等你输入完成后缓冲区内容才批量打印,最终出现提示语出现在用户输入内容之后的异常显示效果。 - 你原代码中使用
Scanner.next()读取姓名的写法也有缺陷:next()只会读取到空格/制表符/换行符为止,无法支持带空格的姓名输入,额外加的zodiac.nextLine()虽然是用来消费输入后的换行符,但写法冗余。
修复方案
每次用print()输出无换行的提示语后,主动调用System.out.flush()强制刷新缓冲区,同时将姓名读取逻辑改为nextLine()支持完整姓名输入,修复后代码如下:
package com.mycompany.mavenproject4; import java.util.Scanner; public class MyZodiac { public static void main(String[] args) { Scanner zodiac = new Scanner(System.in); System.out.println("Chinese Zodiac Sign"); System.out.print("Enter your Name: "); System.out.flush(); String name = zodiac.nextLine(); System.out.print("Enter your year of birth: "); System.out.flush(); int year = zodiac.nextInt(); // 后续生肖计算逻辑可写在此处 } }
运行后即可达到你期望的输出效果。
内容的提问来源于stack exchange,提问作者Tanjiro Kamado
相关产品推荐
相关产品推荐

