指向三维点(对象)的Java二维数组发出空指针异常错误。
我的程序(2个类)的目标是通过从主类获取输入并将其传递给这些建议值来使用对象。要求用户提供x、y、z坐标的范围以及希望生成的坐标数。但是,当我运行该程序时,会出现以下错误:指向三维点(对象)的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
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个问题:
如果您以前处理过NPE,那么您肯定知道行号是异常消息中最重要的部分。所以您肯定知道应该告诉我们哪些行抛出了NPE。看起来这就是给你的例外。由于某种原因,该数组似乎比您想象的要长,并且包含尚未初始化的元素。@HoverCraftFullOfels不计算它似乎是getArray方法,因为该方法只有一行。在抛出异常时,我指向的任何元素都是null。谢谢@Radiodef。他真的应该为我们提供这些信息。我有点惊讶,他让我们猜测,或者让我们计数,这可能是不正确的,因为我们不知道是否有一揽子声明。看起来@Taylor是正确的。我被行号重要的假设蒙蔽了双眼,跳过了那个重要的错误。数组仅为空。:)是的,就是这样
writeData做了同样的事情,也指的是arg而不是实例成员。是的,虽然很难说这是故意的,但状态管理有点混乱。是的。我没有看到任何类型的myArray=
语句,尽管如此,在调用方法时它肯定是空的。OP,引用myArray的其他方法不会引发异常,因为这些方法中对myArray的引用引用引用了参数。名为myArray的字段从一开始就始终为空。@Radiodef是的。同名参数是“屏蔽”DataPoints.myArray的空集