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



我已经编码了一段时间,据我所知,在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.

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

这个问题对我来说有点不清楚,但据我所知,你可以看看RegEx来过滤字符串,或者清除控制台,然后把你的输出放回。

清除控制台:

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

RegEx示例:

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

System.out指的是PrintStream实例。抽象地说,PrintStream对象表示一个可以发送文本的地方。时期一旦发送了文本,故事就结束了。

但事实上,文本实际上在某个地方。如果您从命令行调用Java程序,那么文本所在的位置很可能是终端模拟器窗口或控制台窗;控制台也很可能识别出某些代码,您的程序可以将这些代码嵌入到文本中,告诉它要做什么。

比如,更改文本的颜色,在窗口中移动光标,并重写已经存在的文本。

实际上,已经有数百种不同的编码系统让计算机程序在终端屏幕/窗口上做这些事情,但几乎所有控制台和终端模拟器都支持这种编码系统。谷歌搜索"ANSI转义码"以了解更多信息。

如果你想让你的程序有目的地移动光标,改变文本颜色等。然后你可能想使用第三方库,比如jcurses(谷歌也有)来处理控制台不接受(或未配置为接受)ANSI转义码的可能性。

最新更新