我的程序(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。此外,我尝试删除打印编写器类,但无济于事。在数组的设置器中创建 getArray 方法时,逻辑上工作(代码运行)但继续出现相同的空异常错误。任何输入将不胜感激!
客户端类
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;
}
}