2015-10-16 97 views
1

我正在編譯一個Java程序,使用for循環來找出long的最大值。但是,當我運行該程序時沒有打印任何內容。爲什麼?爲什麼我不能打印最大長值?

這裏是我的代碼:

class LongMaxMin { 
public static void main(String args[]) { 

    long i = 0L; 
    long result = 0L; 

    for (; ;) { 
     result = i++; 
     if (i<0) 
      break; 
    } 
    System.out.println("The biggest integer:" + result); 
    } 
+3

因爲它永遠運行。 –

+0

@JamesKPolk plus1 –

+1

它的工作原理,它只需要很長的時間;) – Cinnam

回答

5

主要是因爲時間。

A long將具有約爲〜9.22百分位的max。你從零開始增加。這意味着你需要經過9個quintillion循環,才能包裝和打破。我試圖在我的javascript控制檯中運行20億次操作,並在強制退出之前超時幾分鐘。

如果你坐在那裏,讓它運行足夠長的時間,你會得到你的輸出。另外,開始i在接近最大的東西,如9,223,372,036,854,700,000,看看它是否仍然給你相同的問題。在Java 8中,允許使用adding underscore to numeric literals。初始化i到類似9_223_372_036_854_700_000L會給你一些更及時的方式。

最大長度非常高,在9.223372e+18For specifics,9,223,372,036,854,775,807是有問題的數字。這也有助於整個「這個作品,它會花太多時間」的理論。

+1

非常詳細的解釋!謝謝;) – Yoyashi

+0

嗨DummyMe我也試圖修改你的邏輯一點,看到輸出..請在下面的線程找到我的答案 – Smiles

0

我認爲你的邏輯是正確的,只是需要很多時間來達到這個價值。

最大長值可以保持是Long.MAX_value是9223372036854775807L

加快邏輯,I修改爲下面的程序,得到了預期的結果。

public static void main(String args[]) { 
     long i = 9223372036854775806L; 
     long result = 0L; 

     for (; ;) { 
      result = i++; 
      if (i<0) { 
       System.out.println("result"+result); 
      System.out.println("i"+i); 

      break; 
      } 
     } 
     System.out.println("The biggest integer: is" + result); 

} 

輸出:

result9223372036854775807 I-9223372036854775808 最大的整數:is9223372036854775807

結果有它改變它的最小值之後它所能容納的最大值。