Java printf复杂化

时间:2015-10-14 20:10:01

标签: java

要使此代码按预期运行,请使用cmd / terminal而不是IDE。 (或者你不会看到\ r的正确效果)

当终端中的9到达4个空格后的最右侧位置时,它将转向并向后移动4个空格。但是,当它在一个完整循环后到达起始点时,第二个空间上剩余的9个未被\ r清除。可能导致这种情况的原因是什么?

public class Core {
    public static void main(String[] args) throws InterruptedException {

        int Array[][] = new int[4][6];
        int score;
        boolean enemy = true;
        boolean dir = true;

        // EnemyLine
        while (enemy) {
            for (int i = 1;;) {
                Thread.sleep(1000);

                if (i == 1)
                    dir = true;
                else if (i == 4)
                    dir = false;
                if (dir == true) {
                    int a = Array[0][i] = 9;
                    System.out.printf("%" + i + "d", a);
                    i++;
                    System.out.print("\r");
                    continue;
                } else if (dir == false) {
                    int a = Array[0][i] = 9;
                    System.out.printf("%" + i + "d", a);
                    i--;
                    System.out.print("               \r");
                    continue;
                }
            }
        }

    }
}   

1 个答案:

答案 0 :(得分:3)

解释为什么会得到这样的结果

基本上在你的循环中你正在改变回车的位置\ r。

当你回到i = 1之后完成循环。你将在你要回车的字符数后改变。

public static void createWindow(int x)
    {
         JFrame frame = new JFrame("WINDOW");
         frame.setSize(40*x, 40*x);

         JPanel panel = new JPanel();
         panel.setLayout(new FlowLayout());

         for(int i = 0; i < x * x; i++)
         {
             JButton button = new JButton();
             button.setPreferredSize(new Dimension(40, 40));
             panel.add(button);
             button.addActionListener(new Action());
         }

         frame.add(panel);

         frame.setLocationRelativeTo(null);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setVisible(true);

    }

    static class Action implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            //changes color of button
        }
    }

因此最后一个陈述没有清除x2处的9

if(dir == true)

中需要更改
1 -> _9\r
2 -> __9\r
3 -> ___9\r
4 -> ____9      \r
x3 -> ___9       \r
x2 -> __9        \r
x1 -> _9\r

或者最好使用

System.out.print(" \r" ); // enter a space before \r

你也可以从条件循环中删除你的sysout \ r并在线程休眠之前使用它

System.out.print("               \r" ); // preferable