2016-04-24 7 views
-2

Я должен рассчитать сумму трех двойных чисел и получить среднее значение. Я должен использовать следующие два метода, не меняя их: getNumbers(), который получает только пользовательские входы, без аргументов, без возврата. getAverage(), которые вычисляют среднее значение трех двойных чисел, возвращает среднее значение и не имеет аргументов.Получить среднее число чисел

Мой вопрос - каждый раз, когда я запускаю его на CMD, он показывает, что метод не работает и не будет печатать вывод. Мне нужно ввести три числа и получить среднее значение в конце.

Если кто-то может дать мне совет относительно того, что я делаю неправильно, он будет весьма признателен.

import java.util.Scanner; 
public class ComputeAverage{ 
    double firstNum; 
    double secondNum; 
    double thirdNum; 
    double sum; 
    double average; 

    public void getNumbers(){ 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter your first number: "); 
     double firstNum = keyboard.nextDouble(); 
     System.out.println("Enter your second number: "); 
     double secondNum = keyboard.nextDouble(); 
     System.out.println("Enter your third number: "); 
     double thirdNum = keyboard.nextDouble(); 
     Test.println("The average is: " + average); 
    } 
    public double getAverage(double firstNum, double secondNum, double thirdNum){ 
     double average = firstNum + secondNum + thirdNum/3; 
     return average; 

    } 
} 
+1

Вы должны научиться Operator приоритет https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –

ответ

1

В коде содержится несколько вопросов.Прежде всего, он не будет компилироваться, поскольку Test неизвестен. Вы также объявили firstNum, secondNum и thirdNum как переменные-члены, но они также объявлены как локальные переменные в getNumbers(). Вы должны решить использовать переменные-члены или передать значения в качестве аргументов в getAverage().

Следующая вещь: / имеет приоритет над +, поэтому thirdNum/3 будет рассчитан первым.

Это не обязательно, но я думаю, что лучше набрать / 3.0, так как 3 будет преобразован в двойное в любом случае, чтобы быть как можно более ясным.

Это может, например, выглядеть следующим образом:

import java.util.Scanner; 

public class ComputeAverage{ 
    double firstNum; 
    double secondNum; 
    double thirdNum; 

    public void getNumbers(){ 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter your first number: "); 
     firstNum = keyboard.nextDouble(); 
     System.out.println("Enter your second number: "); 
     secondNum = keyboard.nextDouble(); 
     System.out.println("Enter your third number: "); 
     thirdNum = keyboard.nextDouble(); 
    } 
    public double getAverage(){ 
     return (firstNum + secondNum + thirdNum)/3.0; 

    } 

    public static void main(String[] args) { 
     ComputeAverage ca = new ComputeAverage(); 
     ca.getNumbers(); 
     System.out.println("The average is: " + ca.getAverage()); 
    } 
} 
4

В то время как вы должны научиться operator precedence for Java, это происходит от BOMDAS, который относится к maths.

/ оператор имеет более высокий приоритет, чем + это означает, что у вас есть

double average = firstNum + secondNum + (thirdNum/3); 

скорее всего, что вы хотели было

double average = (firstNum + secondNum + thirdNum)/3; 

Кроме того, я подозреваю, что вы хотите вызвать этот метод, а также.

Test.println("The average is: " + getAverage(firstNum, secondNum, thirdNum); 

Я бы также превратил все ваши поля в локальные переменные, чтобы избежать путаницы. Примечание. Ваша IDE должна навести на вас намеки на это и дать вам автоматическое исправление.

0

Здесь у вас нет основного метода, который является точкой входа программы. И вы настроите 3 локальных переменных внутри getNumber(), которая не видна на getAverage()

import java.util.Scanner; 
    public class ComputeAverage{ 
     double firstNum; 
     double secondNum; 
     double thirdNum; 
     double sum; 
     double average; 

     public void getNumbers(){ 
      Scanner keyboard = new Scanner(System.in); 
      System.out.println("Enter your first number: "); 
      this.firstNum = keyboard.nextDouble(); 
      System.out.println("Enter your second number: "); 
      this.secondNum = keyboard.nextDouble(); 
      System.out.println("Enter your third number: "); 
      this.thirdNum = keyboard.nextDouble(); 

     } 
     public double getAverage(double firstNum, double secondNum, double thirdNum){ 
      double average = (firstNum + secondNum + thirdNum)/ 3; 
      return average; 

     } 

    public static void main (String [] arg){ 

    getNumbers(); 

    getAverage(firstNum, secondNum, thirdNum); 

     Test.println("The average is: " + average); 
    } 
    } 
+1

Я думаю, что вам нужно узнать о приоритете оператора и переменных области. –

+1

Или BOMDAS из Maths. ;) –

+1

@PeterLawrey, да :-) –

0

3 вещи вы должны рассмотреть для того, чтобы сделать этот код работать

  1. нужно позвонить System.out.println или определить статический метод println в классе Test (вы его не публиковали, поэтому я думаю, что у вас его нет)
  2. Среднее значение не будет обновляться, это значение автоматически, вам нужно вызвать метод, который вы определили .. . getAverage
  3. d ОНТ забывают приоритет оператора в getAverage

подведением, вам необходимо:

заменить это:

Test.println("The average is: " + average); 

с

System.out.println("The average is: " + getAverage(firstNum, econdNum, thirdNum)); 

и из-за оператора Приоритет:

public double getAverage(double firstNum, double secondNum, double thirdNum){ 
     double average = (firstNum + secondNum + thirdNum)/3; 
     return average; 

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