[英]Why multiple calls of System.out.println prints values in single line
这只是一个有趣的问题。 不是真正的生产代码。 我不想修复它。 我只想了解这种奇怪的行为。 我的代码应该在每一行打印“1”。 实际上,这是错误的。 我在一行中得到了像“11111111”这样的奇怪结果。
class Scratch
{
public static void main( String[] args )
{
method();
}
static void method()
{
try
{
System.out.println(1);
method();
}
catch ( StackOverflowError e )
{
method();
}
}
}
输出可能如下:
1
11111
1
11111
1
1
1
1
1
11111111
1
11111
然而,正如@khelwood在评论中所说,你不应该对忽略重复StackOverflowError
的程序有任何特定的期望。 任何事都可能出错。
但是,尝试一个不太可能的解释: System.out.println(1)
包括打印1
和平台特定的换行序列 - 在Windows上再次由打印\\r
和\\n
。 没有什么能阻止两者之间发生堆栈溢出或者在成功打印1
之后尝试打印换行符。 在这些情况下,下一个1
(如果成功)将打印在同一行。
您的输出似乎显示大约30 1
和大约12(完整)换行符。 显然,我描绘的场景发生的时间略多于一半。 如果这是正确的解释,我们不知道。
好奇地尝试着你的代码,今天感觉Daredevilish ..
如果添加System.out.println(2);
在catch
你可以看到结果现在显示1是用单行打印的,它是来自catch的那些和触发错误的那些忽略光标从println
移动的
static void method() {
try {
System.out.println(1);
method();
} catch (StackOverflowError e) {
System.out.println(2);
method();
}
}
输出:
1
1
122
122
1
122
122
1
1
public class Test {
static int count = 0; //counter
public static void main( String[] args )
{
method();
}
static void method()
{
try
{
if (count < 10) //Stop code after 10 runs
{
System.out.println(1);
count++; //increments count
method();
}
}
catch ( StackOverflowError e )
{
method();
}
}
}
你的问题是没有if或限制因素你不能做递归。 在上面的代码中,我使用计数来防止编码打印无限
记住任何时候使用递归它必须有条件告诉它什么时候停止
编辑:关于您在多行上的打印。 这很可能是由于计算机打印速度非常快,以至于它在某些地方重叠
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.