[英]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.