【问题标题】:Is it possible in Java to show the results of a for loop in only one Output?是否可以在 Java 中仅在一个输出中显示 for 循环的结果?
【发布时间】:2016-07-31 01:54:36
【问题描述】:

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

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)

如果有任何帮助,我将不胜感激。 谢谢

法师

编辑:因此它可以与 /r 命令一起使用,但只能在 Windows 本身的 CMD 中使用。也许它是一个错误左右,但它回答了我的问题。谢谢你:)

【问题讨论】:

    标签: java for-loop countdown


    【解决方案1】:

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

    您可以使用 "\r" 来回车,而无需使用 \n,后者是换行符。回车应该让你回到行首。

    【讨论】:

      【解决方案2】:

      是的,使用print 而不是println 并在每个输出的末尾添加"\r"

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

      当您使用println 时,它会做两件事:移动到下一行(换行)并将光标返回到行首(回车)。把它想象成打字机:-)

      如果您手动打印"\r"(只是回车)而不前进到下一行,那么您打印的下一个内容将覆盖该行的先前内容。

      【讨论】:

      • 我刚试过。我不为我工作。它仍然在彼此下方显示每个数字。就像 System.out.println()
      • 您是从命令行还是从编辑器/IDE 中运行代码?
      • 我使用 Eclipse 作为 IDE。所以代码在IDE中运行
      • 好的,Eclipse 的输出窗口可能没有正确处理\r。你在最近的 Eclipse 上吗?这曾经是 Eclipse 中的一个错误,但它打算在去年 6 月的版本中修复。
      • 我使用版本:Luna Release (4.4.0)。我可以在 cmd 控制台中试试这个。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您正在寻找Curses 库。

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

        有一些 Java Curses 库在 What's a good Java, curses-like, library for terminal applications?

        可能看起来很多,但除此之外,您需要一个自己的终端功能数据库来实现该功能。

        【讨论】:

          猜你喜欢
          • 2015-02-20
          • 1970-01-01
          • 2014-04-15
          • 2020-11-22
          • 2012-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-22
          相关资源
          最近更新 更多