Java 为什么调试和运行程序的输出顺序不同?

Java 为什么调试和运行程序的输出顺序不同?,java,for-loop,Java,For Loop,我编写了一个程序,使用for循环生成一组对象,然后将输出发送到控制台。我已设法使输出可读。但是,控制台输出看起来不太好 “玩家”类代码: “多层”类代码 跑步后我看到的是: Player なのは 1 ATK 100 100 ATK 100 Player なのは 2 100 由于程序可以很好地运行,并且在调试期间我没有看到异常结果,所以我不知道为什么输出会以不同的顺序显示 System.out和System.err不能保证它们在控制台上的显示顺序,因为它们是不同的流。我建

我编写了一个程序,使用for循环生成一组对象,然后将输出发送到控制台。我已设法使输出可读。但是,控制台输出看起来不太好

“玩家”类代码:

“多层”类代码

跑步后我看到的是:

Player なのは 1  
ATK 100  
100  
ATK 100  
Player なのは 2  
100  

由于程序可以很好地运行,并且在调试期间我没有看到异常结果,所以我不知道为什么输出会以不同的顺序显示

System.out和System.err不能保证它们在控制台上的显示顺序,因为它们是不同的流。我建议只使用System.out进行输出。

控制台是否显示乱码?是否有一条消息转到
System.err
,而其他消息转到
System.out
?@并引起注意。虽然它会从IDE显示在控制台中,但不可能按所需顺序显示。另外:在构造函数中设置的任何变量都不应该是静态的,例如
Name
HP
@Mena真的吗?除了排序,我看不出输出有什么不同。而
static
变量不会对调试/非调试产生影响。
public class Multiplayers
{
    public static void createPlayer()
    {
        int playerCount; 
        int players [] = new int [2]; 
        for (playerCount = 0; playerCount<players.length; playerCount++)
        {
            Player p1 = new Player("なのは", 100, 100); 
            StringBuilder p1_n = p1.setName();
            System.out.print(p1_n+" ");
            System.out.println(playerCount+1); 
            System.err.println("ATK "+Player.ATK);
            System.out.println(Player.HP);
        }
    }
}
Player なのは 1  
ATK 100  
100  
Player なのは 2  
ATK 100  
100
Player なのは 1  
ATK 100  
100  
ATK 100  
Player なのは 2  
100