0

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

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

我的编译器在运行时给了我错误:在 numberge.Numberge.main(Numberge.java:44) Java Result: 1

我还尝试使 for 循环迭代的次数更少,但它没有帮助。有任何想法吗?

程序给我的整个输出是:运行:完成生成/现在写入文件平方 150000000 线程“main”中的异常 java.lang.NullPointerException at numberge.Numberge.main(Numberge.java:43) Java 结果:1 BUILD成功(总时间: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();


    }
}

据我所知,一旦我可以实际存储数字,我就会将其平方。

4

2 回答 2

1

所以就在这里。您的变量 square 为空。

static BigInteger square = null;

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

for(int i = 0; i<150000000; i++)
    {
        square = square.add(BigInteger.valueOf(number[i]));
    }
于 2013-10-11T18:22:47.133 回答
0

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

  1. 也许 square 没有初始化。如果是这样,则

    方=方.add(...

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

修复这样的项目 square = new Square(); 应该事先调用。

  1. 也许number没有初始化。

修复它与修复相同square

  1. 也许number[i]缺乏价值。这在处理对象数组时经常发生。
于 2013-10-11T18:15:20.450 回答