Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Methods - Fatal编程技术网

Java 尝试在不同方法中使用变量时出错

Java 尝试在不同方法中使用变量时出错,java,arrays,methods,Java,Arrays,Methods,按照上一个问题的建议,我遇到了一个例外:java.lang.ArrayIndexOutOfBoundsException 我的程序从文件中读取关于(当前)两个粒子及其当前位置、速度和力的数据(所有三个属性都有x、y和z)。这是我的档案: 2 10.0.0.0.0.0.0.0.0.0.0.0.0.0.0 21.50.0.0.0.0.0.0.0.0.0.0.0.0.0 第一个数字是计数,即有多少粒子。每个粒子都有ID、类型、位置、速度和力 我试图做的是在main中使用局部变量readfile(),并

按照上一个问题的建议,我遇到了一个例外:java.lang.ArrayIndexOutOfBoundsException

我的程序从文件中读取关于(当前)两个粒子及其当前位置、速度和力的数据(所有三个属性都有x、y和z)。这是我的档案:

2

10.0.0.0.0.0.0.0.0.0.0.0.0.0.0

21.50.0.0.0.0.0.0.0.0.0.0.0.0.0

第一个数字是计数,即有多少粒子。每个粒子都有ID、类型、位置、速度和力

我试图做的是在
main
中使用局部变量
readfile()
,并尝试修复我以前的问题

这是我的密码:

import java.io.File;
import java.io.IOException;
import java.util.*;
import java.io.FileReader;
import java.io.FileNotFoundException;

public class Particle {
int particleID;
int particleType;
double particlePosition[] = new double[3];
double particleVelocity[] = new double[3];
double particleForce[] = new double[3];
static int count;
static int current = 0;
static Scanner readData;

public static void main(String[] args) {

    int k = 100; // in [N/m] or [kg*m/s^2]
    int m = 1; // in [kg]
    double x0 = 1; // in [m]
    double t;  // in [s]
    double dt;  //  in [s]
    double oldForce1;
    double oldForce2;
    double curTime = 0;
    double finTime;

    t = 1/((1/(2*(Math.PI))) * Math.sqrt(2*k/m));
    System.out.println(t);

    dt = t/150;

    readfile();
    Particle [] mainParticles = Particle.readfile();
    System.out.println("First:  [ " + mainParticles[0].particlePosition[0] + " , " + 0 + " ]");
    System.out.println("Second:  [ " + mainParticles[1].particlePosition[0] + " , " + 0 + " ]");

}

public static Particle[] readfile(){

        Particle [] listParticles = new Particle[count];

        try{
            readData = new Scanner(new File("src/2particle-initial.data"));
        }
        catch(Exception e){
            System.out.println("Could not find file");
        }

        count = readData.nextInt();

        while (current < count){
            listParticles[current] = new Particle();
            listParticles[current].particleID = readData.nextInt();
            listParticles[current].particleType = readData.nextInt();

            listParticles[current].particlePosition[0] = readData.nextDouble();
            listParticles[current].particlePosition[1] = readData.nextDouble();
            listParticles[current].particlePosition[2] = readData.nextDouble();

            listParticles[current].particleVelocity[0] = readData.nextDouble();
            listParticles[current].particleVelocity[1] = readData.nextDouble();
            listParticles[current].particleVelocity[2] = readData.nextDouble();

            listParticles[current].particleForce[0] = readData.nextDouble();
            listParticles[current].particleForce[1] = readData.nextDouble();
            listParticles[current].particleForce[2] = readData.nextDouble();

            current++;
        }
        current = 0;

        System.out.println("First:  [ " + listParticles[0].particlePosition[0] + " , " + 0 + " ]");
        System.out.println("Second:  [ " + listParticles[1].particlePosition[0] + " , " + 0 + " ]");

        readData.close();
        return listParticles;
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.util.*;
导入java.io.FileReader;
导入java.io.FileNotFoundException;
公共类粒子{
int particleID;
int粒子型;
双粒子位置[]=新双粒子[3];
double particleVelocity[]=新的double[3];
双粒子力[]=新的双粒子力[3];
静态整数计数;
静态电流=0;
静态扫描仪读取数据;
公共静态void main(字符串[]args){
int k=100;//英寸[N/m]或[kg*m/s^2]
int m=1;//英寸[kg]
双x0=1;//英寸[m]
双t;//在[s]中
双dt;//in[s]
双奥尔德福斯1;
双oldForce2;
双缩短时间=0;
双finTime;
t=1/((1/(2*(数学PI)))*Math.sqrt(2*k/m));
系统输出打印ln(t);
dt=t/150;
readfile();
Particle[]mainpicles=Particle.readfile();
System.out.println(“第一个:[“+mainParticles[0].particlePosition[0]+”,“+0+]”);
System.out.println(“第二个:[“+mainParticles[1].particlePosition[0]+”,“+0+]”);
}
公共静态粒子[]读取文件(){
粒子[]列表粒子=新粒子[计数];
试一试{
readData=新扫描仪(新文件(“src/2particle initial.data”);
}
捕获(例外e){
System.out.println(“找不到文件”);
}
count=readData.nextInt();
while(电流<计数){
listParticles[当前]=新粒子();
listParticles[current].particleID=readData.nextInt();
listParticles[current].particleType=readData.nextInt();
listParticles[current].particlePosition[0]=readData.nextDouble();
listParticles[current].particlePosition[1]=readData.nextDouble();
listParticles[current].particlePosition[2]=readData.nextDouble();
listParticles[current].particleVelocity[0]=readData.nextDouble();
listParticles[current].particleVelocity[1]=readData.nextDouble();
listParticles[current].particleVelocity[2]=readData.nextDouble();
listParticles[current].particleForce[0]=readData.nextDouble();
listParticles[current].particleForce[1]=readData.nextDouble();
listParticles[current].particleForce[2]=readData.nextDouble();
电流++;
}
电流=0;
System.out.println(“第一个:[“+listParticles[0].particlePosition[0]+”,“+0+]”);
System.out.println(“第二个:[“+listParticles[1].particlePosition[0]+”,“+0+]”);
readData.close();
返回列表粒子;
}
}

在黑暗中拍摄,但一个明显的错误是如何初始化
粒子[]
数组列表。您应该在设置
计数后执行此操作,否则arraysize将为0

    count = readData.nextInt();
    Particle [] listParticles = new Particle[count];

在黑暗中拍摄,但一个明显的错误是如何初始化
Particle[]
数组列表。您应该在设置
计数后执行此操作,否则arraysize将为0

    count = readData.nextInt();
    Particle [] listParticles = new Particle[count];
readFile()
方法中,您试图在从文件中读取
count
之前创建一个大小为
count
的数组,因此它总是创建一个大小为0的数组(类型为
int
的默认值)

换下零件

  Particle [] listParticles = new Particle[count];

    try{
        readData = new Scanner(new File("src/2particle-initial.data"));
    }
    catch(Exception e){
        System.out.println("Could not find file");
    }

    count = readData.nextInt();

在第二个代码块中,变量计数是在创建数组之前设置的,因此它会创建大小合适的数组。在
readFile()
方法中,您试图在从文件读取
count
之前创建大小为
count
的数组,因此它总是创建大小为0的数组(类型
int
的默认值)

换下零件

  Particle [] listParticles = new Particle[count];

    try{
        readData = new Scanner(new File("src/2particle-initial.data"));
    }
    catch(Exception e){
        System.out.println("Could not find file");
    }

    count = readData.nextInt();


在第二个代码块中,变量计数是在创建数组之前设置的,因此它会创建适当大小的数组

,那么您的哪一行代码导致异常?请向我们显示
粒子
类。那么您的哪一行代码导致异常?请向我们显示
粒子
类。