2016-07-19 2 views
0

Когда я делаю этот код, он говорит мне:Как преобразовать двойной в двойной массив?

"incompatible: double cannot be converted to double[]" 

Что мне делать, чтобы исправить это?

public class Gravity 
{ 
    public static double[] calcGravity(double[] radius, double[] mass) 
    { 
     // The formula to calculate gravity is: g = (G*M)/r^2 
     for(int i = 0; i < 9; i++) 
     { 
     return 6.67E-17 * mass[i]/Math.pow(radius[i], 2); //incompatible error 
     } 

    public static void main(String[] args) throws IOException 
    { 
     // Initialize variables 
     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.30E23, 4.87E24, 5.97E24, 6.42E23, 1.90E27, 5.68E26, 8.68E25, 1.02E26, 1.27E22}; 

     // Processing 
     double[] gravities = calcGravity(radii, masses); 

     // Output 
     printResults(names, radii, masses, gravities); 
     printToFile(gravities); 
    } 
} 
+1

Это немного перепутано. Во-первых, чтобы исправить ваш код, вы можете заставить метод возвращать 'double' вместо' double array'. Во-вторых, ваш код не имеет большого смысла. У вас есть 'for loop', итерация от 0 до 8, но вы возвращаетесь от него на самой первой итерации. Для чего нужна итерация? – Matt

+0

Ну, есть еще к заданию, но я не хотел, чтобы вы чувствовали, что вы делаете мою домашнюю работу для меня. Должен ли я добавить его? – Maya

+0

Вам нужно построить массив гравитаций в цикле, а затем вернуть массив после цикла, а не вернуть первое значение. – jmoerdyk

ответ

1

Я не свеж на Java в какой-либо мере, но ваша ошибка компилятора говорит вам точно, как это звучит. Вы пытаетесь преобразовать double в двойной массив.

Глядя на вашу функцию, calcGravity, вы возвращающая результат:

6.67E-17 * масса [я]/Math.pow (радиус [я], 2);

Теперь проблема в этом. Вы используете оператор return в цикле for, который возвращает одно двойное значение.

Я полагаю, что вы намерены сделать это для каждого из 9 вычислений, которые вы пытаетесь сделать в calcGravity. Поэтому вам нужно создать массив любого размера, который вам нужен, запустить цикл for и задать каждое значение, а затем вернуть массив, а не отдельные значения вычислений.

public static double[] calcGravity(double[] radius, double[] mass) 
{ 
    // The formula to calculate gravity is: g = (G*M)/r^2 
    double[] array = new double[9]; 

    for(int i = 0; i < 9; i++) 
    { 
     array[i] = 6.67E-17 * mass[i]/ Math.pow(radius[i],2);    //incompatible error 
    } 

    return array; 
} 

Не уверен, если это действительный синтаксис Java для создания массива, но я думаю, вы получите точку.

+0

Спасибо. Это исправило мою проблему :) – Maya

+0

Отметьте решение тогда, если хотите, поэтому тему можно закрыть :-) – Zulukas

0

Функция может возвращать только одно значение за один раз. После того, как он возвращает значение, управление возвращается к вызывающей функции. Однако в вашем коде вы пытаетесь вернуть более одного значения, т. Е. Значения силы тяжести после каждой итерации. я предлагаю вам изменить свою функцию следующим образом:

public static void main(String[] args)throws IOException 
{ 
// Initialize variables 
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.30E23, 4.87E24, 5.97E24, 6.42E23, 1.90E27, 5.68E26, 8.68E25, 1.02E26, 1.27E22}; 
double gravities[]=new Double[9]; 
for(int i=0, i<9; i++) 
{ 
    gravities[i] = calcGravity(radii[i] , masses[i]); 
} 
} 
public static double calcGravity(double radius, double mass) 
{ 
// The formula to calculate gravity is: g = (G*M)/r^2 

for(int i = 0; i < 9; i++) 
{ 
    return 6.67E-17 * mass/ Math.pow(radius,2);    
} 
}//end of calcGravity 

Также вы забыли закрыть функцию calcGravity.

+0

Спасибо за помощь! – Maya

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