在方法中使用数组?

时间:2013-11-21 04:37:45

标签: arrays methods

我一直在尝试为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时遇到错误。有什么特别的东西我需要一个方法来识别位于别处的变量吗?

2 个答案:

答案 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);
}

或者,您可以将namesradiimasses定义为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内引用massescalcGravity,但这意味着calcGravity是硬编码的,以便始终计算那些行星。最好将半径和质量信息作为参数传递给calcGravity,因为它可以用于任何行星。


另外,最好编写一个calcGravity方法,只需一个质量和半径(不是数组),只返回一个< / em>结果。然后基于数组的版本可以在循环中调用非数组版本。将这些事物分开是很好的,因为循环数组与计算重力无关。