为什么我不能打印最大长值?

问题描述:

我正在编译一个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

主要是因为时间。

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

我认为你的逻辑是正确的,只是需要很多时间来达到这个价值。

最大长值可以保持是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

结果有它改变它的最小值之后它所能容纳的最大值。