指向三维点(对象)的Java二维数组发出空指针异常错误。

指向三维点(对象)的Java二维数组发出空指针异常错误。,java,class,object,constructor,nullpointerexception,Java,Class,Object,Constructor,Nullpointerexception,我的程序(2个类)的目标是通过从主类获取输入并将其传递给这些建议值来使用对象。要求用户提供x、y、z坐标的范围以及希望生成的坐标数。但是,当我运行该程序时,会出现以下错误: java.lang.NullPointerException at DataPoints.getArray(DataPoints.java:31) at Client.main(Client.java:27) at sun.reflect.NativeMethodAccessorImpl.invok

我的程序(2个类)的目标是通过从主类获取输入并将其传递给这些建议值来使用对象。要求用户提供x、y、z坐标的范围以及希望生成的坐标数。但是,当我运行该程序时,会出现以下错误:

 java.lang.NullPointerException
    at DataPoints.getArray(DataPoints.java:31)
    at Client.main(Client.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
与我的上一个问题类似,它看起来是同一个错误,但是上一次它是一个不使用静态方法的问题。这一次似乎完全不同,当试图写入文件(X,Y,Z的值)时,文件也保持为空

我试着检查给定用户输入的值,看看输入是否已注册并且没有设置为0。此外,我还尝试删除print writer类,但没有成功。在数组的setter中创建getArray方法时,该方法在逻辑上工作(代码运行),但会出现相同的null异常错误。任何意见都将不胜感激

客户端类

import java.io.*;

public class Client {

  public static void main (String [] args) throws IOException {
    BufferedReader myInput = new BufferedReader (new InputStreamReader(System.in));

    DataPoints c = new DataPoints();
    double dataArray [] [] = new double[3] [10000] ; 
    double range;
    int numPoints;
    String input;

    System.out.println("Please enter a range for (X,Y,Z) , As each value is approached from \nPostive infinity and Negative infinity");
    System.out.println("In other words a true value is used, for instance entering '100' would be of the range '100' --> '-100'");
    input = myInput.readLine(); 
    range = Double.parseDouble(input);
    c.setRange(range);

    System.out.println("Now please enter the amount you want to generate (NumPoints variable)");
    input = myInput.readLine();
    numPoints = Integer.parseInt(input);
    c.setNumPoints(numPoints);
    c.setArray(dataArray);

    // d = sqrt(x^2 + y^2 z^2) 
   System.out.println(c.getArray());
  }
}
对象类

import java.io.*;

public class DataPoints {

  BufferedReader myInput = new BufferedReader (new InputStreamReader (System.in));  // allow input
  private double myArray[][]; 
  private int myNumPoints;
  private double myRange;
  private int i;
  public DataPoints() {

  }

  public void writeData (double myArray[][]) throws IOException {
    PrintWriter printWriter = (new PrintWriter ("file.txt"));
    printWriter.println("The numbers in notation --> (X,Y,Z) are as follows (" + myArray[0][i] + ") (" + myArray[1][i] + ") (" + myArray[2][i] + ")");
  printWriter.close();

  }

  public void setArray (double [][] myArray) {
    for (i = 0; i < myNumPoints; i++ ) {
      myArray[0][i] =  2* (double)(Math.random () * myRange) - myRange; //first position of array ...
      myArray[1][i] =  2* (double)(Math.random () * myRange) - myRange; // second position ofarray..
      myArray[2][i] =  2* (double)(Math.random () * myRange) - myRange; // third position of array...

    }
  }
  public double getArray() 
  { 
    return myArray[0][i];
  } 

  public void setNumPoints(int NumPoints) {
    myNumPoints = NumPoints;
  }

  public int getNumPoints() {
    return myNumPoints;
  }

  public void setRange(double Range) {
    myRange = Range; 
  }

  public double getRange() {
    return myRange;  
  }
} 
import java.io.*;
公共类数据点{
BufferedReader myInput=new BufferedReader(new InputStreamReader(System.in));//允许输入
专用双myArray[]];
私有整数myNumPoints;
私人双myRange;
私人互联网i;
公共数据点(){
}
public void writeData(双myArray[][])引发IOException{
PrintWriter PrintWriter=(新的PrintWriter(“file.txt”);
printWriter.println(“符号-->(X,Y,Z)中的数字如下(“+myArray[0][i]+”(+myArray[1][i]+”(+myArray[2][i]+”));
printWriter.close();
}
public void setArray(双[][]myArray){
对于(i=0;i
2个问题:

  • 您从不初始化DataPoints.myArray
  • setArray的参数名为myArray,与DataPoints.myArray相同,因此setArray中的代码引用的是参数,而不是实例成员

  • 如果您以前处理过NPE,那么您肯定知道行号是异常消息中最重要的部分。所以您肯定知道应该告诉我们哪些行抛出了NPE。看起来这就是给你的例外。由于某种原因,该数组似乎比您想象的要长,并且包含尚未初始化的元素。@HoverCraftFullOfels不计算它似乎是getArray方法,因为该方法只有一行。在抛出异常时,我指向的任何元素都是null。谢谢@Radiodef。他真的应该为我们提供这些信息。我有点惊讶,他让我们猜测,或者让我们计数,这可能是不正确的,因为我们不知道是否有一揽子声明。看起来@Taylor是正确的。我被行号重要的假设蒙蔽了双眼,跳过了那个重要的错误。数组仅为空。:)是的,就是这样
    writeData做了同样的事情,也指的是arg而不是实例成员。是的,虽然很难说这是故意的,但状态管理有点混乱。是的。我没有看到任何类型的
    myArray=
    语句,尽管如此,在调用方法时它肯定是空的。OP,引用myArray的其他方法不会引发异常,因为这些方法中对myArray的引用引用引用了参数。名为myArray的字段从一开始就始终为空。@Radiodef是的。同名参数是“屏蔽”DataPoints.myArray的空集