Java 尝试在不同方法中使用变量时出错
按照上一个问题的建议,我遇到了一个例外:java.lang.ArrayIndexOutOfBoundsException 我的程序从文件中读取关于(当前)两个粒子及其当前位置、速度和力的数据(所有三个属性都有x、y和z)。这是我的档案: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(),并
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();
到
在第二个代码块中,变量计数是在创建数组之前设置的,因此它会创建适当大小的数组,那么您的哪一行代码导致异常?请向我们显示粒子
类。那么您的哪一行代码导致异常?请向我们显示粒子
类。