0

我的程序(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;  
  }
} 
4

1 回答 1

1

2个问题:

  1. 你永远不会初始化 DataPoints.myArray
  2. DataPoints.setArray 的参数名为 myArray,与 DataPoints.myArray 相同,因此您在 setArray 中的代码指的是参数而不是实例成员。
于 2013-10-25T02:12:47.523 回答