2013-10-11 31 views
0

好的,所以这里是交易。我创建了一个程序,创建一个拥有150000000个不同地址的字节数组。然后我把它放到一个for循环中,该循环将为0-9之间的随机正数赋值,并将该数字输出到文件中。 ,所有的工作,但我遇到问题的地方是我真正试图平方米的地方。即时通讯使用类BigInteger尝试存储数字即时尝试平方。这是我的代码,试图把数字转换为BigInteger在Java中使用1.5亿位数字

for(int i = 0; i<150000000; i++) 
    { 
     square = square.add(BigInteger.valueOf(number[i])); 
    } 

和我的编译器在运行时给我的错误:异常线程“main”显示java.lang.NullPointerException 在numberge.Numberge.main( Numberge.java:44) Java结果:1

我也试图让for循环迭代次数更少,并没有帮助。有任何想法吗?

,该方案给我的整个输出是: 运行: 完成生成/现在写入文件 在numberge.Numberge.main线程“主”显示java.lang.NullPointerException 平方 1.5 异常(Numberge的.java:43) Java结果:1所 生成成功(总时间:9秒),

整个代码是

import java.util.Random; 
import java.io.*; 
import java.math.BigInteger; 

public class Numbersqu { 
static byte[] number = new byte[150000000]; 
static Random generator = new Random(System.currentTimeMillis()); 
static BigInteger square = null; 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws IOException 
{ 

    for(int i = 0; i<150000000; i++) 
    { 
     number[i] = (byte) Math.abs(generator.nextInt(9)); 
    } 
    System.out.println("done generating/now writing to file"); 
    File file = new File("number.txt"); 
    if (!file.exists()) { 
      file.createNewFile(); 
     } 
    FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 
        for(int i = 0; i<150000000; i++) 
    { 
     bw.write(Integer.toString(number[i])); 
    } 
     bw.close(); 
     System.out.println("generating number to square"); 
     System.out.println(Integer.toString(number.length)); 
     for(int i = 0; i<150000000; i++) 
    { 
     square = square.add(BigInteger.valueOf(number[i])); 
    } 
    System.out.println("Writing square to file"); 
    File file2 = new File("square.txt"); 
    if (!file2.exists()) 
    { 
      file2.createNewFile(); 
} 
    FileWriter fw2 = new FileWriter(file2.getAbsoluteFile()); 
     BufferedWriter bw2 = new BufferedWriter(fw2); 
        bw2.write(square.toString()); 
        bw2.close(); 


    } 
} 

就我所知,一旦我真的可以储存这个数字,我就会把它编成数字。

+0

是什么号的长度是多少? –

+3

粘贴你的代码给别人帮忙 –

+3

看起来你可能需要在循环前初始化'square' –

回答

0

我可以看到两个可能的问题,但是对于这段代码片段,没有足够的信息来提示真正知道这些项目是否是真正的问题。

  1. 也许广场不是initalized。如果是这样,

    平方= square.add(...

将间接引用在square.add(...)调用一个空指针,导致空指针异常。

要解决这样一个项目 正方形=新广场(); 应事先称为

  1. 也许number未初始化
  2. 0123。

修复它与修复square相同。

  1. 也许number[i]缺少一个值。处理对象数组时经常发生这种情况。
+0

我刚刚发布了我的整个源代码。我试图改变我的循环只经过10次,它仍然会给我同样的错误。我在其他for循环中使用数组数组,最大值为150000000。和我初始化方块为空,这就是我认为我可能有问题 – user2218815

1

所以就在这里。你的变量平方为空。

static BigInteger square = null; 

使用此之前它初始化为某个值:

for(int i = 0; i<150000000; i++) 
    { 
     square = square.add(BigInteger.valueOf(number[i])); 
    } 
+0

好的,我做到了,但我遇到了另一个问题。当我这样做时,无论我在初始化它时使用哪个数字,它始终只有9位数字。我做了它输出square.bitCount(),它总是13或14. – user2218815

+0

你初始化值为零或别的东西? –

+0

首先我尝试了0,然后我确实喜欢90000000,然后4,然后23与相同的结果 – user2218815

相关问题