2012-06-23 25 views
7

我想弄清楚Java 7 x64中与BigIntegers相关的以下问题。我试图计算出一个数字,以极高的力量。代码如下,然后是问题描述。打印非常大BigIntegers

import java.math.BigInteger; 

public class main { 

    public static void main(String[] args) { 
     // Demo calculation; Desired calculation: BigInteger("4096").pow(800*600) 
     BigInteger images = new BigInteger("2").pow(15544); 

     System.out.println(
      "The number of possible 16 bpc color 800x600 images is: " 
      + images.toString());   
    } 
} 

我遇到了打印此操作结果的问题。执行此代码时,将打印该消息,但不会显示images.toString()的值。

要隔离问题,我开始计算两个幂,而不是在该行的注释中列出的所需计算。在我测试过的两个系统上,2^15544是触发问题的最小计算; 2^15543工作正常。

我不是在哪里接近主机系统的内存限制,我不相信我甚至接近VM限制(无论如何,运行VM参数-Xmx1024M-Xms1024M都没有影响)。

在互联网戳寻找答案我已经开始怀疑,我打在任何BigIntegerString涉及到一个数组(Integer.MAX_VALUE),这些类型的使用内部数据存储的最大尺寸的限制后。如果问题出在String上,我认为可以延长BigInteger,并写出一种打印方法,一次印出几个字符,直到打印整个BigInteger,但我宁可怀疑问题在于别处。

谢谢您花时间阅读我的问题。

+0

嗯,这个代码工作对我很好,而且在这里工作得很好:http://ideone.com/EA0yl。 –

+0

我认为这个问题可能是你的终端。尝试将其打印到文件中。 –

+2

您可以调试运行时。使用JDK - 它具有源 –

回答

11

问题是Eclipse中控制台视图的错误。

在我的设置中,Eclipse(Helios和Juno)无法在没有CRLF的情况下显示长度超过4095个字符的单个行。最大长度可以根据您的字体选择而变化 - 请参阅下文。

因此,即使下面的代码也会显示问题 - 不需要BigInteger

StringBuilder str = new StringBuilder(); 
for (int i = 0; i < 4096; i++) { 
    str.append('?'); 
} 
System.out.println(str); 

也就是说,字符串实际上是印在控制台 - 例如你可以将它复制出来。它只是没有显示。

作为一种变通方法,您可以设置在控制台的喜好Fixed width console设置,该字符串将immediatelly出现:

view of the pref

基于Eclipse的Bugzilla对应的错误是:

根据这些,这是一个Windows/GTK错误,Eclipse的开发人员无法对此做任何事情。

该错误是有关文本的长度是像素,使用较小的 字体,你将能够在之前 符文,以获得更多的字符。

+0

果然,结果显示固定宽度控制台已启用。我应该做更好的问题隔离。感谢您的时间。 – Techrocket9