Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不同的类中使用公共数组_Java_Arrays - Fatal编程技术网

Java 在不同的类中使用公共数组

Java 在不同的类中使用公共数组,java,arrays,Java,Arrays,我是一个Java新手,在不同的类中使用两个公共数组时遇到错误。这个程序应该通过数学积分来模拟3个星际天体。注意:我是这个网站的新手,还不能确定格式 package gravitationalmodel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; public class GravitationalModel { private Ob

我是一个Java新手,在不同的类中使用两个公共数组时遇到错误。这个程序应该通过数学积分来模拟3个星际天体。注意:我是这个网站的新手,还不能确定格式

package gravitationalmodel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class GravitationalModel 
{
  private Object timer;
  private GravitationalObject G1;
  private GravitationalObject G2;
  private GravitationalObject G3;
  public static double[] xArray;
  public static double[] yArray;
  final public double gravConst = 0.000000000067; 
  final public int refreshRate = 25;


  public GravitationalModel()
  {
    Timer timer = new Timer(refreshRate, (ActionListener) this); // refreshes model every 25 milliseconds
  }

  public static void main(String[] args) 
  {
    GravitationalObject G1 = new GravitationalObject(500, 500, 10, 10, 10); // creates 3 interstellar objects taking x position,
    GravitationalObject G2 = new GravitationalObject(400, 400, 10, 10, 10); // y position, x veleocity component, y velocity component
    GravitationalObject G3 = new GravitationalObject(600, 600, 10, 10, 10); // mass of the object


    xArray = new double[1920]; // assigns all elements of array to 0
    for (int x = 0; x < 1920; ++x)
    {
        xArray[x] = 0;
        //System.out.println(xArray[x]);
    }


    yArray = new double[1200];
    for (int x = 0; x < 1200; ++x)
    {
        yArray[x] = 0;
        //System.out.println(yArray[x]);
    }
  }

  public void actionPerformed(ActionEvent e) // refreshes model
  {
    G1.refreshVectorField();
    G2.refreshVectorField();
    G3.refreshVectorField();
    G1.refreshObjects();
    G2.refreshObjects();
    G3.refreshObjects();

  }
}

package gravitationalmodel;

public class GravitationalObject 
{
  private double xPos;   //location and speed of gravitational object
  private double yPos;
  private double vX;
  private double vY;
  private double mass;


  public GravitationalObject(double x, double y, double xv, double yv, double m)
  {
    xPos = x;
    yPos = y;
    vX = xv;
    vY = yv;
    mass = m;
  }

  public void refreshVectorField() // calculates gravitational field
  {
    int k = 1;
    for (int x = 0; x < 1920; ++x)
    {
      if (xPos > x)
        k = 1;
      else
        k= -1;
      if (xPos - x == 0)
        ++x;
      xArray[x] += k * (gravConst * mass) / Math.sqrt(xPos - x, 2.0); // errors on this line
    }
    for (int y = 0; y < 1200; ++y)
    {
      if (yPos < y)
        k = 1;
      else
        k= -1;
      yArray[y] += (gravConst * mass) / Math.sqrt(Math.abs(yPos - y), 2); //errors on this line
    }
  }

  public void refreshObjects()
  {
    vX += refreshRate/1000 * xArray[xPos]; // errors on these lines
    vY += refreshRate/1000 * yArray[yPos];
    xPos += refreshRate/1000 * vX;
    xPos += refreshRate/1000 * vX;
  }
}
包装重力模型;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.Timer;
公共类引力模型
{
私有对象定时器;
私人引力对象G1;
私人引力对象G2;
私人重力物体G3;
公共静态双[]xArray;
公共静态双[]雅雷;
最终公共双gravConst=0.000000000067;
最终公共利率=25;
公共引力模型()
{
Timer Timer=new Timer(refreshRate,(ActionListener)this);//每25毫秒刷新一次模型
}
公共静态void main(字符串[]args)
{
引力对象G1=新引力对象(500500,10,10,10);//创建3个位于x位置的星际对象,
重力对象G2=新的重力对象(400,400,10,10,10);//y位置,x速度分量,y速度分量
重力对象G3=新重力对象(600600,10,10,10);//对象的质量
xArray=new double[1920];//将数组的所有元素分配给0
对于(int x=0;x<1920;++x)
{
xArray[x]=0;
//System.out.println(xArray[x]);
}
雅雷=新双[1200];
对于(int x=0;x<1200;++x)
{
雅雷[x]=0;
//System.out.println(yArray[x]);
}
}
public void actionPerformed(ActionEvent e)//刷新模型
{
G1.refreshVectorField();
G2.refreshVectorField();
G3.刷新向量场();
G1.刷新对象();
G2.refreshObjects();
G3.刷新对象();
}
}
包装重力模型;
公共类引力对象
{
私有双xPos;//重力物体的位置和速度
私人双YPO;
专用双vX;
私人双重身份;
私人双弥撒;
公共重力对象(双x、双y、双xv、双yv、双m)
{
xPos=x;
yPos=y;
vX=xv;
vY=yv;
质量=m;
}
public void refreshVectorField()//计算重力场
{
int k=1;
对于(int x=0;x<1920;++x)
{
如果(xPos>x)
k=1;
其他的
k=-1;
如果(xPos-x==0)
++x;
xArray[x]+=k*(gravConst*mass)/Math.sqrt(xPos-x,2.0);//此行有错误
}
对于(整数y=0;y<1200;++y)
{
if(yPos
您试图从
重力对象
访问
重力模型.xArray
,而不完全限定静态字段。要么完全限定该字段,要么在
重力模型
中创建一个方法来执行该工作


请注意,公共可变字段在Java中通常不受欢迎,因为它破坏了封装。最好让您的对象通过方法封装数据和行为,并保持变量的私有性。

作为初学者,您不应该着急。很快你就可以写很酷的程序了。这个程序中有很多错误,甚至程序也没有任何逻辑。你应该先练习一些小程序来获得基础知识。与您创建的以下对象类似,您根本不使用这些对象

GravitationalObject G1 = new GravitationalObject(500, 500, 10, 10, 10); // creates 3 interstellar objects taking x position,
GravitationalObject G2 = new GravitationalObject(400, 400, 10, 10, 10); // y position, x veleocity component, y velocity component
GravitationalObject G3 = new GravitationalObject(600, 600, 10, 10, 10); // mass of the object
现在是程序中的错误

如果要访问其他类中的实例变量
gravConst
refreshRate
,则需要创建类的对象并访问它们。 或者您可以创建静态的,并像这样将它们导入类

导入静态重力模型.gravitationalmodel.xArray;
导入静态重力模型.gravitationalmodel.yArray;
导入静态重力模型。重力模型。重力常数;
导入静态重力模型。重力模型。刷新率

Math.sqrt(double)
不接受2个参数,因此我认为您需要使用
xArray[x]+=k*(gravConst*mass)/Math.pow(xPos-x,2.0)

将double强制转换为int作为数组的索引只能是整数,如下所示

vX+=refreshRate/1000*xArray[(int)xPos];
vY+=刷新率/1000*yArray[(int)yPos]

因此,您的最终计划如下:

package gravitationalmodel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class GravitationalModel {
    private Object timer;
    private GravitationalObject G1;
    private GravitationalObject G2;
    private GravitationalObject G3;
    public static double[] xArray;
    public static double[] yArray;
    final static public double gravConst = 0.000000000067;
    final static public int refreshRate = 25;

    public GravitationalModel() {
        Timer timer = new Timer(refreshRate, (ActionListener) this); // refreshes
                                                                        // model
                                                                        // every
                                                                        // 25
                                                                        // milliseconds
    }

    public static void main(String[] args) {
        GravitationalObject G1 = new GravitationalObject(500, 500, 10, 10, 10); // creates
                                                                                // 3
                                                                                // interstellar
                                                                                // objects
                                                                                // taking
                                                                                // x
                                                                                // position,
        GravitationalObject G2 = new GravitationalObject(400, 400, 10, 10, 10); // y
                                                                                // position,
                                                                                // x
                                                                                // veleocity
                                                                                // component,
                                                                                // y
                                                                                // velocity
                                                                                // component
        GravitationalObject G3 = new GravitationalObject(600, 600, 10, 10, 10); // mass
                                                                                // of
                                                                                // the
                                                                                // object

        xArray = new double[1920]; // assigns all elements of array to 0
        for (int x = 0; x < 1920; ++x) {
            xArray[x] = 0;
            // System.out.println(xArray[x]);
        }

        yArray = new double[1200];
        for (int x = 0; x < 1200; ++x) {
            yArray[x] = 0;
            // System.out.println(yArray[x]);
        }
    }

    public void actionPerformed(ActionEvent e) // refreshes model
    {
        G1.refreshVectorField();
        G2.refreshVectorField();
        G3.refreshVectorField();
        G1.refreshObjects();
        G2.refreshObjects();
        G3.refreshObjects();

    }

}
包装重力模型;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.Timer;
公共类引力模型{
私有对象定时器;
私人引力对象G1;
私人引力对象G2;
私人重力物体G3;
公共静态双[]xArray;
公共静态双[]雅雷;
最终静态公共双gravConst=0.000000000067;
最终静态公共int刷新率=25;
公共引力模型(){
计时器计时器=新计时器(刷新率,(ActionListener)this);//刷新
//模型
//每一个
// 25
//毫秒
}
公共静态void main(字符串[]args){
重力对象G1=新重力对象(500500,10,10,10);//创建
// 3
//星际的
package gravitationalmodel;

import static gravitationalmodel.GravitationalModel.xArray;
import static gravitationalmodel.GravitationalModel.yArray;
import static gravitationalmodel.GravitationalModel.gravConst;
import static gravitationalmodel.GravitationalModel.refreshRate;

public class GravitationalObject {
    private double xPos; // location and speed of gravitational object
    private double yPos;
    private double vX;
    private double vY;
    private double mass;

    public GravitationalObject(double x, double y, double xv, double yv,
            double m) {
        xPos = x;
        yPos = y;
        vX = xv;
        vY = yv;
        mass = m;
    }

    public void refreshVectorField() // calculates gravitational field
    {
        int k = 1;
        for (int x = 0; x < 1920; ++x) {
            if (xPos > x)
                k = 1;
            else
                k = -1;
            if (xPos - x == 0)
                ++x;
            xArray[x] += k * (gravConst * mass) / Math.pow(xPos - x, 2.0); // errors
                                                                            // on
                                                                            // this
                                                                            // line
        }
        for (int y = 0; y < 1200; ++y) {
            if (yPos < y)
                k = 1;
            else
                k = -1;
            yArray[y] += (gravConst * mass) / Math.pow(Math.abs(yPos - y), 2); // errors
                                                                                // on
                                                                                // this
                                                                                // line
        }
    }

    public void refreshObjects() {
        vX += refreshRate / 1000 * xArray[(int)xPos]; // errors on these lines
        vY += refreshRate / 1000 * yArray[(int)yPos];
        xPos += refreshRate / 1000 * vX;
        xPos += refreshRate / 1000 * vX;
    }
}