要使此代码按预期运行,请使用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;
}
}
}
}
}
答案 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