2016-04-24 70 views
-2

我應該計算三個雙數的總和並得到它的平均值。 我需要使用以下兩種方法,不改變它們: getNumbers()其中只有用戶輸入,沒有參數,沒有返回。其中計算三個雙數的平均值,返回平均值,並且沒有參數。獲取數字的平均值

我的問題是我每次在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

你應該學會運算符優先級https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –

回答

1

你的代碼有幾個問題。首先,它不會編譯爲Test是未知的。您還將firstNumsecondNumthirdNum聲明爲成員變量,但它們也在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

在這裏你沒有一個主要的方法,這是程序的入口點。而你已經初始化內部getNumber(),這是不可見的getAverage()3個局部變量,你需要爲了考慮到使此代碼

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

或來自Maths的BOMDAS。 ;) –

+1

@PeterLawrey,是的:-) –

0

3東西的工作

  1. 需要調用System.out.println,或在類Test中定義靜態方法println(你沒有發佈它,所以我猜你沒有它)
  2. 平均值不會更新是自動的值,你需要調用你定義的方法。 。getAverage
  3. d ONT忘記了運算符優先級在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; 

    }