2013-11-21 3 views
0

Я пытался научиться Java и программированию в целом для APCS. Но у меня есть вопрос относительно доступа к существующему массиву в методе.Использование массивов в методах?

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

И не кажется, что это будет работать, как задумано, я получаю сообщение об ошибке при ИНТ arrayLength = masses.length. Есть ли что-то особенное, что мне нужно, чтобы получить метод распознавания переменной, расположенной в другом месте?

ответ

1
int arrayLength = masses.length; 

Должно быть

int arrayLength = mass.length; 

Ваш метод принимает в mass ARG не в masses.

Если вы используете IDE, вы можете навести курсор на проблему, и она сообщит вам, в чем проблема.

Edit: Другие проблемы

Ваш метод имеет тип возврата double[] но вы ничего не возвращает в методе

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 класса, делает их видимыми для всех методов в классе:

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 метод, который принимает только один массу и радиус (не массивы) и возвращает только один результат. Тогда версия на основе массива может вызывать версию без массива в цикле. Хорошо держать эти вещи раздельными, поскольку петля массива не имеет никакого отношения к вычислению силы тяжести.

Смежные вопросы