【问题标题】:Java - using /r within one System.out [duplicate]Java - 在一个 System.out 中使用 /r [重复]
【发布时间】:2020-11-13 16:33:38
【问题描述】:

我试图在一个 System.out 中获得几行单独的文本。应该有 4 行单独的行,而不是该程序只打印最后一行。

我正在考虑用单独的 System.out 为每一行替换它,但我不确定它是否是最快的解决方案以及当前的解决方案有什么问题。

包含上述代码的方法:

   public double getTotal(Addition addition1, Addition addition2, Addition addition3, Addition addition4){
        this.additionPrices = ("First addition - " + addition1.getName() + " costs " + addition1.getPrice() + "\r" +
                              "Second addition - " + addition2.getName() + " costs " + addition2.getPrice() + "\r" +
                              "Third addition - " + addition3.getName() + " costs " + addition3.getPrice() + "\r" +
                              "Fourth addition - " + addition4.getName() + " costs " + addition4.getPrice());
        this.total = this.price + addition1.getPrice() + addition2.getPrice() + addition3.getPrice() + addition4.getPrice();
        return (this.price + addition1.getPrice() + addition2.getPrice() + addition3.getPrice() + addition4.getPrice());
    }

使用它的主类:


    public static void main(String[] args) {

        Meat meat = new Meat();
        Roll roll = new Roll();

        Addition tomato = new Tomatos(2);
        Addition lettuce = new Lettuce(1);
        Addition pickle = new Pickle(3);
        Addition onion = new Onion(1.5);

        Hamburger hamburger = new Hamburger(meat,roll,20);


        hamburger.getTotal(onion,onion, tomato, onion);
        hamburger.showPrice();


    }
}

结果:


Base price equals: 20.0
Total price equals: 26.5
Fourth addition - Onion costs 1.5

Process finished with exit code 0

对不起,如果这很明显。这是我在这里的第一个问题,我无法在旧问题中找到答案。

【问题讨论】:

标签: java


【解决方案1】:

使用换行符\n 而不是\r

在支持它的终端中,回车符\r 将光标返回到行首。它为您提供了一种删除和覆盖当前行的方法。

相比之下,换行符\n 将光标移动到下一行。

【讨论】:

  • 非常感谢,当然成功了。
【解决方案2】:

我试图在一个 System.out 中获得几行单独的文本。

unix 中的行由\n 字符分隔,而不是\r 字符,后者将光标重置到行首。在您的情况下,您的每一行都覆盖了前一行。

但是你真的不应该做\n。你应该这样做:

System.out.println("First addition - " + addition1.getName() + " costs "
      + addition1.getPrice());
System.out.println("Second addition - " + addition2.getName() + " costs "
      + addition2.getPrice() + "\r" );

println(...) 打印消息,然后添加可移植的“行分隔符”字符,因此它可以在不使用\n 作为行尾的其他操作系统下工作。这意味着您不必直接使用\n 字符。

我正在考虑用单独的 System.out 为每一行替换它,但我不确定它是否是最快的解决方案以及当前的解决方案有什么问题。

这是教科书premature optimization。不要担心多个System.out 调用,因为它们无论如何都在执行 IO,因此不会注意到可能使用的微小额外资源(如果有的话,您正在谈论纳秒)。您在优化的代码中存在错误是一个完美的例子,说明为什么我们应该为可维护和可读的代码工作,并且只在必要时进行优化。

【讨论】:

  • 非常感谢,很有意义我会记住这一点的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2014-02-15
  • 2013-01-12
相关资源
最近更新 更多