2013-12-05 4 views
0

У меня есть проект, в котором у меня есть четыре метода. Второй и третий методы (с и без соответственно) имеют в себе массивы, в которых пользователь вводит данные.Java: Передача массивов по другому методу

Ниже приведен пример второго метода. Третий очень похоже, что

public static void billWithoutGardens() 
{ 
    Scanner input = new Scanner(System.in); 

    double withoutGardens[] = new double[12]; 

    System.out.println("Please enter energy bills for year without rooftop gardens"); 
    // 12 part array, one for each month 
    System.out.print("Please enter energy bill for January: "); 
    withoutGardens [0] = input.nextDouble(); 
    System.out.print("Please enter energy bill for February: "); 
    withoutGardens [1] = input.nextDouble(); 
    System.out.print("Please enter energy bill for March: "); 
    withoutGardens [2] = input.nextDouble(); 
    System.out.print("Please enter energy bill for April: "); 
    withoutGardens [3] = input.nextDouble(); 
    System.out.print("Please enter energy bill for May: "); 
    withoutGardens [4] = input.nextDouble(); 
    System.out.print("Please enter energy bill for June: "); 
    withoutGardens [5] = input.nextDouble(); 
    System.out.print("Please enter energy bill for July: "); 
    withoutGardens [6] = input.nextDouble(); 
    System.out.print("Please enter energy bill for August: "); 
    withoutGardens [7] = input.nextDouble(); 
    System.out.print("Please enter energy bill for September: "); 
    withoutGardens [8] = input.nextDouble(); 
    System.out.print("Please enter energy bill for October: "); 
    withoutGardens [9] = input.nextDouble(); 
    System.out.print("Please enter energy bill for November: "); 
    withoutGardens [10] = input.nextDouble(); 
    System.out.print("Please enter energy bill for December: "); 
    withoutGardens [11] = input.nextDouble(); 

    System.out.println(Arrays.toString(withoutGardens)); 


    return; 

Я пытаюсь использовать 4-й метод для вычисления разности между каждым из элементов 2 массивов. Я не знаю, как это сделать и после долгих поисков я обращаюсь к хорошим людям в Stackoverflow.

4-й метод как таковой

public static void calculateSavings(double withoutGardens[], double withGardens[]) 
{ 

} 

Это правильный способ, чтобы начать этот метод для того, чтобы достичь своей цели вычисления разницы?

EDIT - как я могу назвать 4-й метод обратно в основной?

calculateSavings(withoutGardens[], withGardens[]); 

, что, как я его, как сейчас, и я получаю ошибки на нем, что он «не может быть преобразовано в переменную».

+0

плохой тег. должен быть Java – Julius

+0

это выглядит хорошо. Ты это пробовал? – Julius

+0

должен, скорее всего, вернуться к двойному, а не пустому, хотя – Julius

ответ

2

Создайте новый массив того же размера, что и withoutGardens, затем выполните цикл и установите элементы нового массива на разницу в элементах withoutGardens и withGardens.

Также в ваших методах вы хотите вернуть созданные массивы, то есть withoutGardens, так как это локальная переменная внутри billWithoutGardens() и не доступна вне этого метода.

Изменить метод подпись:

public static double[] billWithoutGardens() 

и последней линии:

return withoutGardens; 
0

Да, вы правы, вы должны пройти 2 массива в функцию далее, и вы можете вернуться результат массива

public static double[] calculateSavings(double withoutGardens[], double withGardens[]) 
{ 
    double difference_array[withoutGardens.length()]; 
    //.....some code goes here for calculations 
    return difference_array; 
} 
0
double[] diff = new double[12]; 
for(int i = 0; i < 12; i++){ 
    diff[i] = withoutGardens[i] - withGardens[i]; 
} 
return diff; 
0

Полагаю, я могу ответить на ваш вопрос.

Прежде чем ответить на этот вопрос, позвольте мне отметить, что вместо следующих параметров:

double withoutGardens[], double withGardens[] 

Вы должны вместо этого использовать:

double[] withoutGardens, double[] withGardens 

Чтобы гарантировать, что тип параметра является массив, а скобки - не только в имени.

Теперь, чтобы определить разницу между каждым элементом, вы должны пройти через них. Это можно сделать с помощью простого цикла или с циклом foreach. На мой взгляд, цикл for будет проще, чем цикл foreach, поскольку вы используете 2 массива, а цикл for может дать вам целое число для индекса, который будет использоваться для обоих. Если вы использовали цикл foreach, вам придется использовать метод для поиска текущего индекса.

С для цикла, это будет выглядеть примерно так:

public static double[] calculateSavings(double[] withGardens, double[] withoutGardens) { 
    double[] difference = new double[]; 
    for (int i = 0; i < withGardens.size(); i++) { 
     difference[i] = withGardens[i] - withoutGardens[i]; 
    } 
    return difference; 
} 

Я надеюсь, что это помогает!

+0

А, мой плохой. По-видимому, вам не нужно менять имена параметров. В любом случае, это не условно. – piticent123

0

Я знаю, что ответ уже принят, тем не менее, есть несколько вещей, которые я хотел бы упомянуть, что вы/другие могли бы воспользоваться. Во-первых, пусть billWithoutGardens() возвращает массив удваивается, что пользователь вошел, так давайте изменим это подпись:

public static double[] billWithoutGardens() { 

} 

Далее, вы можете значительно упростить ввод данных с помощью цикла в методе, например .:

//an array of months 
String[] months = {"January", "February", "March", "April", "May", "June", "July", "September", "October", "November", "December"}; 

System.out.println("Please enter energy bills for year without rooftop gardens"); 

//loop through the months and store the values in your array 
for(int i=0; i<months.length; i++) { 
    System.out.print("Please enter energy bill for " + months[i] + ": "); 
    withoutGardens[i] = input.nextDouble(); 

    //!!!!!!!!!!!!! 
    //also remember to skip newline character added when user pressed ENTER 
    //you can consume it with this call, which will read newline character 
    input.nextLine(); 
} 

Затем возвращает массив со значениями, добавив это в последней строке в вашем методе:

return withoutGardens; 

Далее, для расчета экономии, давайте также возвращать массив в кал culateSavings(), поэтому изменить его подпись:

public static double[] calculateSavings(double[] withoutGardens, double[] withGardens) 

И вычислить разницу, создать массив, который будет содержать значение для каждого месяца, и цикл через несколько месяцев:

double[] difference = new double[withoutGardens.length]; 

for (int i=0; i<difference.length; i++) { 
    difference[i] = withoutGardens[i] - withGardens[i]; 
} 

На конец, вернуть массив:

return difference; 

Аналогичным образом вы можете переписать другие методы. Затем, чтобы использовать их в main(), вы можете получить следующее:

public static void main(String[] args) { 
    double[] wGardens = billWithGardens(); 
    double[] woGardens = billWithoutGardens(); 
    double[] savings = calculateSavings(woGardens, wGardens); 

    System.out.println(Arrays.toString(savings)); 

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