Java 在我的for循环中获取BoundsException阵列
由于错误您检查Java 在我的for循环中获取BoundsException阵列,java,arrays,loops,for-loop,Java,Arrays,Loops,For Loop,由于错误您检查名称数组的边界,并访问重力和重量,假设它们与名称长度相同或更大,您检查名称数组的边界,并访问重力和重量,假设它们具有相同或更大的长度长度为names您的问题从takeFromFile开始,它接收一个空数组(double[]gravity={};)并返回一个空数组 随后,在重力(或重力)数组上迭代的所有循环都不会执行任何操作,而从0到names.length-1(在printResults中)迭代的循环会导致ArrayIndexOutOfBoundsException,因为它假定名称
名称
数组的边界,并访问重力
和重量
,假设它们与名称长度相同或更大,您检查名称
数组的边界,并访问重力
和重量
,假设它们具有相同或更大的长度长度为names
您的问题从takeFromFile
开始,它接收一个空数组(double[]gravity={};
)并返回一个空数组
随后,在重力
(或重力
)数组上迭代的所有循环都不会执行任何操作,而从0到names.length-1
(在printResults
中)迭代的循环会导致ArrayIndexOutOfBoundsException
,因为它假定名称
和重力
数组具有相同的长度。您的问题从takeFromFile
开始,它接收一个空数组(double[]gravity={};
)并返回一个空数组
随后,在重力
(或重力
)数组上迭代的所有循环都不会执行任何操作,而从0到names.length-1
(在printResults
中)迭代的循环会导致ArrayIndexOutOfBoundsException
,因为它假定名称
和重力
数组具有相同的长度
是一个空数组,因此必须像其他数组一样填充它double[]gravity={}
是一个空数组,因此必须像其他数组一样填充它修改代码以处理对象和列表。它变得更加清晰:
java.lang.ArrayIndexOutOfBoundsException: 1
at WeightOnPlanetsV1.printResults(WeightOnPlanetsV1.java:45)
at WeightOnPlanetsV1.main(WeightOnPlanetsV1.java:63)
类行星{
字符串名;
地球上的双重重量;
双重重力;
双质量;
公共星球(…){…}//构造函数。
}
公共静态void main(字符串[]args)引发IOException{
列表行星=新的ArrayList();
添加(新行星(…);
...
}
修改代码以处理对象和列表。它变得更加清晰:
java.lang.ArrayIndexOutOfBoundsException: 1
at WeightOnPlanetsV1.printResults(WeightOnPlanetsV1.java:45)
at WeightOnPlanetsV1.main(WeightOnPlanetsV1.java:63)
类行星{
字符串名;
地球上的双重重量;
双重重力;
双质量;
公共星球(…){…}//构造函数。
}
公共静态void main(字符串[]args)引发IOException{
列表行星=新的ArrayList();
添加(新行星(…);
...
}
基本上,您可以初始化:
double[]重力={}代码>在主函数中
然后调用:double[]gravities=takeFromFile(gravity)代码>由于重力没有任何元素,而且在takeFromFile(double[])函数中有以下内容:
class Planet {
String name;
double weightOnPlanet;
double gravity;
double mass;
public Planet(...) { ... } // Constructor.
}
public static void main(String[] args) throws IOException {
List<Planet> planets = new ArrayList<>();
planets.add(new Planet(...));
...
}
for(int i=0;i
它基本上读取文件gravity.lenght次(顺便说一句,这是一个非常糟糕的主意。如果文件的数字小于gravity的长度[],则会出现另一个错误)
无论如何,正如前面有人所说,这一切都会导致重力和重力为空,最终权重[]也是如此,因为您使用以下方法初始化它:
double[]最终重量=计算重量(重力、质量)代码>
既然万有引力只有0个元素。。。嗯,这是常有的事。
现在,names[]有9个元素,大于0,这就是为什么在中:
System.out.printf(“%5s%10f%15f\n”,名称[i]、重力[i]、重量[i])代码>
您将获得ArrayOutOfBounds异常(因为您没有检查重力[]或重量[]大小,结果都是0)。这意味着您需要确保使用比名称[]更大的长度初始化gravity[]
我个人会重写代码。创建一个名为“Planet”的对象,该对象具有质量、重力和名称属性,并在该对象内具有与函数相同的函数calcWeight()或calcWeight(双质量)。然后,您可以在主函数中创建Planet[]数组,还可以使用它intakeFromFile(Planet[]planets),通过文件all planets数组而不仅仅是权重初始化。但这只是我的偏好。基本上,您可以初始化:
double[]重力={}代码>在主函数中
然后调用:double[]gravities=takeFromFile(gravity)代码>由于重力没有任何元素,而且在takeFromFile(double[])函数中有以下内容:
class Planet {
String name;
double weightOnPlanet;
double gravity;
double mass;
public Planet(...) { ... } // Constructor.
}
public static void main(String[] args) throws IOException {
List<Planet> planets = new ArrayList<>();
planets.add(new Planet(...));
...
}
for(int i=0;i
它基本上读取文件gravity.lenght次(顺便说一句,这是一个非常糟糕的主意。如果文件的数字小于gravity的长度[],则会出现另一个错误)
无论如何,正如前面有人所说,这一切都会导致重力和重力为空,最终权重[]也是如此,因为您使用以下方法初始化它:
double[]最终重量=计算重量(重力、质量)代码>
既然万有引力只有0个元素。。。嗯,这是常有的事。
现在,names[]有9个元素,大于0,这就是为什么在中:
System.out.printf(“%5s%10f%15f\n”,名称[i]、重力[i]、重量[i])代码>
您将获得ArrayOutOfBounds异常(因为您没有检查重力[]或重量[]大小,结果都是0)。这意味着您需要确保使用比名称[]更大的长度初始化gravity[]
我个人会重写代码。创建一个名为“Planet”的对象,该对象具有质量、重力和名称属性,并在该对象内具有与函数相同的函数calcWeight()或calcWeight(双质量)。然后,您可以在主函数中创建Planet[]数组,还可以使用它intakeFromFile(Planet[]planets),通过文件all planets数组而不仅仅是权重初始化。但这只是我的偏好。当您遇到此异常时,是否尝试将异常打印到Eclipse的控制台?当您遇到此异常时,是否尝试打印i
for (int i = 0; i < gravity.length; i++) {
gravity[i] = inFile.nextDouble();
gravity[i] = gravity[i] / 10;
}