在Java中使用1.5亿位数字

时间:2013-10-11 17:58:54

标签: java math nullpointerexception biginteger

好的,所以这是交易。我创建了一个程序,创建一个具有150000000个不同地址的字节数组。然后我将它放入一个for循环中,它将在0-9之间为值分配一个随机正数,并将该数字输出到文件中。 一切正常但我遇到问题的地方是我实际上试图解决它的问题。即时通讯使用类BigInteger尝试存储我试图平方的数字。这是我的代码,试图将数字放入BigInteger

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循环迭代的次数少一些,但没有用。任何想法?

程序给我的整个输出是: 跑: 完成生成/现在写入文件 现蕾 1.5 线程“main”java.lang.NullPointerException中的异常     在numberge.Numberge.main(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();


    }
}

这是我已经得到的,一旦我可以存储数字,那么我将对它进行调整。

2 个答案:

答案 0 :(得分:1)

所以在这里。你的变量square为null。

static BigInteger square = null;

在使用之前将其初始化为某个值:

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

答案 1 :(得分:0)

我可以看到两个可能的问题,但是使用这段代码片段,没有提供足够的信息来真正了解这些项目中的任何一个是真正的问题。

  1. 也许广场不是初学者。如果是这样,

    square = square.add(...

  2. 将在square.add(...)调用时取消引用空指针,从而导致空指针异常。

    修复此类项目     square = new Square(); 应该事先打电话。

    1. 可能number未初始化。
    2. 修复它与修复square相同。

      1. 也许number[i]缺少价值。在处理对象数组时,这种情况经常发生。