我一直在尝试为APCS学习java和编程。但我有一个关于在方法中访问现有数组的问题。
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
public class Gravity
{
static final double G = 6.67 * Math.pow(10, -17);
public static double[] calcGravity(double[] radius, double[] mass)
{
int arrayLength = masses.length;
for (int i = 0; (i < arrayLength); i++)
{
double value = (G * mass[i])/Math.pow(radius[i], 2.0);
}
}
public static void main(String[] args)throws IOException
{
String[] names = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
double[] radii = {2439.7, 6051.9, 6378, 3402.5, 71492, 60270, 25562, 24774, 1195};
double[] masses = {3.3022 * Math.pow(10,23), 4.8685 * Math.pow(10,24), 5.9736 * Math.pow(10,24), 6.4185 * Math.pow(10,23), 1.8986 * Math.pow(10,27), 5.6846 * Math.pow(10,26), 8.6810 * Math.pow(10,25), 1.0243 * Math.pow(10,26), 1.312 * Math.pow(10,22)};
}
}
它似乎没有按预期工作,我在int arrayLength = masses.length时遇到错误。有什么特别的东西我需要一个方法来识别位于别处的变量吗?
答案 0 :(得分:1)
int arrayLength = masses.length;
应该是
int arrayLength = mass.length;
您的方法采用mass
arg而不是masses
。
如果您使用的是IDE,则可以将问题悬停在其中,它会告诉您问题所在。
编辑:其他问题
您的方法的返回类型为double[]
,但您不会在方法
答案 1 :(得分:0)
方法无法在其他方法中访问局部变量。由于calcGravity
数组接受参数,如果从calcGravity
调用main
,则可以使用这些参数传递数组:
public static void main(String[] args)throws IOException
{
String[] names = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
double[] radii = {2439.7, 6051.9, 6378, 3402.5, 71492, 60270, 25562, 24774, 1195};
double[] masses = {3.3022 * Math.pow(10,23), 4.8685 * Math.pow(10,24), 5.9736 * Math.pow(10,24), 6.4185 * Math.pow(10,23), 1.8986 * Math.pow(10,27), 5.6846 * Math.pow(10,26), 8.6810 * Math.pow(10,25), 1.0243 * Math.pow(10,26), 1.312 * Math.pow(10,22)};
double[] gravities = calcGravity(radii, masses);
}
或者,您可以将names
,radii
和masses
定义为Gravity
类中的静态变量,这使得它们对类中的所有方法都可见:< / p>
public class Gravity
{
private static String[] names = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
private static double[] radii = {2439.7, 6051.9, 6378, 3402.5, 71492, 60270, 25562, 24774, 1195};
private static double[] masses = {3.3022 * Math.pow(10,23), 4.8685 * Math.pow(10,24), 5.9736 * Math.pow(10,24), 6.4185 * Math.pow(10,23), 1.8986 * Math.pow(10,27), 5.6846 * Math.pow(10,26), 8.6810 * Math.pow(10,25), 1.0243 * Math.pow(10,26), 1.312 * Math.pow(10,22)};
// ...
}
然后您可以在radii
内引用masses
和calcGravity
,但这意味着calcGravity
是硬编码的,以便始终计算那些行星。最好将半径和质量信息作为参数传递给calcGravity
,因为它可以用于任何行星。
另外,最好编写一个calcGravity
方法,只需一个质量和半径(不是数组),只返回一个< / em>结果。然后基于数组的版本可以在循环中调用非数组版本。将这些事物分开是很好的,因为循环数组与计算重力无关。