代码之家  ›  专栏  ›  技术社区  ›  MageD

在Java中,是否可以仅在一个Output中显示for循环的结果?

  •  1
  • MageD  · 技术社区  · 10 年前

    我有一个在控制台中显示倒计时的小代码。

    for(int i = this.roundTimerMinute; i > -1; i--)
        {
            for(int j = this.roundTimerSeconds; j > 0; j--)
            {
    
                if( j < 10)
                {
                    System.out.println(i + ":0" + j);
                }
                else if(!(i == 0 && j == 60) && (j < 56 && i == 1))
                {
                    System.out.println(i + ":" + j);
                }
                else if(i == 0 && j != 60)
                {
                    System.out.println(i + ":" + j);
                }
    
                if(i == 0 && j == 60)
                {
                    System.out.println("1:00");
                }
    
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {}
            }
        }
    

    目前的输出如下:

    1:55
    1:54
    1:53 
    .
    .
    .
    

    可以仅在一行中显示整个倒计时。不是连续的,但新的println()会像这样覆盖旧的:

    1:55 (this display is overridden 1 seconds later by 1:54 and so on)
    

    我很感激你的帮助。 谢谢

    MageD公司

    编辑:因此它与/r命令一起工作,但仅在Windows本身的CMD中工作。也许这是一个错误,但它回答了我的问题。谢谢:)

    4 回复  |  直到 10 年前
        1
  •  2
  •   mikej heading_to_tahiti    10 年前

    是,使用 print 而不是 println 并添加 "\r" 在每个输出结束时:

    例如 System.out.println(i + ":0" + j + "\r");

    当您使用 打印 它做两件事:移动到下一行(换行)并将光标返回到行的开头(回车)。把它想象成一台打字机:-)

    如果手动打印 “\r” (仅回车)而不前进到下一行,则打印的下一个内容将覆盖该行的前一内容。

        2
  •  0
  •   Community Mohan Dere    9 年前

    你可以试试这个: Java: Updating text in the command-line without a new line

    您可以在回车时使用“\r”,而不使用“新行”。回车键应该将您放回行首。

        3
  •  0
  •   Dan O    10 年前

    你想给你的终端写点东西(比如 1:59 ),然后擦除它并用其他东西覆盖它(例如 1:58 ) ? 如果是这样的话,那么就没有简单的方法可以用常规的 System.out 方法。您需要了解 control characters 对于您的操作系统和终端类型,或者可能使用建议的库 here (我没有尝试过其中的任何一个,它们正是谷歌给我的)。

        4
  •  0
  •   Community Mohan Dere    9 年前

    你在找一个 Curses 图书馆

    大多数curses的实现都使用一个数据库来描述数千个不同终端的能力。有一些实现,例如使用专用设备驱动程序而不是终端数据库的PDCurse。大多数实现使用terminfo;有些使用termcap。

    中介绍了一些Java Curses库 What's a good Java, curses-like, library for terminal applications?

    这可能看起来很像,但如果不是这样,您将需要一个自己的终端能力数据库来实现这一功能。