2016-04-24 96 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; 

    }