使用System.out.println输出后可以更改一行吗?

时间:2015-11-09 15:26:33

标签: java arrays sorting debugging

我已经编写了一段时间,据我所知,一旦你用Java输出一行到System.out.println;你无法改变它。

我问这个问题的原因是因为我的程序有一些非常奇怪的结果。该程序记录冒泡排序的时间并合并排序算法,以排序不同类型的int数组,并以不同的n大小打印这些时间的平均值,其中n是数组的大小。

到目前为止,我已经对这个程序遇到了一连串的问题,但是我不明白以下是可能的:

...
At 200000, randomly-sorted takes: 
NaN                  //Expected output, since I did not activate the random arrays.
...

然而, 在同一行 ,并且以不可预测的方式,该程序偶尔会这样做:

...
At 200000, randomly-sorted takes: 
75683.45
...

然后在一段时间后再次换回来!

所以该程序以某种方式管理替换输出的行,这是我以前从未体验过的。

非常感谢任何帮助或澄清!如果您需要代码,我非常乐意与您分享。

编辑:为了澄清,这是在运行Java SE 6的Macbook Air上。至于代码,请通过以下链接参考我的Github帐户以及整个项目 - https://github.com/danielsoutar/complexityPractical

旁注:另一件事。对于冒泡排序,随机生成的数组显然需要比反向排序数组更长的排序,这显然是无稽之谈。不确定这是否对这个问题很重要,但需要注意。

2 个答案:

答案 0 :(得分:0)

这个问题对我来说有点不清楚,但据我所知,您可以查看RegEx过滤掉字符串或清除控制台并重新输出输出。

清除控制台:

Runtime.getRuntime().exec("cls");

RegEx示例:

yourString.replaceAll("[yourCharactersToReplace]","");

答案 1 :(得分:0)

System.out指的是PrintStream个实例。在摘要中,PrintStream对象表示可以发送文本的位置。期。一旦文本被发送,那就是故事的结束。

但实际上文本实际上是某处。如果从命令行调用Java程序,那么文本所在的位置很可能是终端模拟器窗口或控制台窗口;并且控制台也很可能识别出程序可以嵌入到文本中的某些代码,这些代码可以指示它执行操作。

比如,改变文本的颜色,在窗口中移动光标,并覆盖已存在的文本。

已经有数百个的不同编码系统让计算机程序在终端屏幕/窗口上执行这些操作,但几乎所有控制台和终端仿真器都支持一个。谷歌为“ANSI转义码”了解更多信息。

如果你希望你的程序有目的地移动光标,更改文本颜色等。那么你可能想要使用像jcurses这样的第三方库(google也是如此)来处理没有控制台的可能性接受(或未配置为接受)ANSI转义码。