Java中的基础数学

时间:2014-03-19 06:54:11

标签: java

我正在学习Java并正在开发一个基本程序,用户可以输入成本数字,通货膨胀百分比和时间(年)来计算包括通货膨胀在内的成本。

我使用了三个类,一个应用程序类,一个驱动程序类和一个单数类。我按照本书的说法来构建OOP技能(我知道有更简单的程序/结构化方法,但这不是我练习的重点)。

我遇到的问题是输出答案是$ 0而不管我输入的数字。显然不应该这样。如果有人能够略过我的代码并指出我正确的方向,我将不胜感激。

申请类:

    package priceestimator;

 public class PriceEstimator {

    public static void main(String[] args) {
        CostCalculator CostCalc = new CostCalculator();
        CostCalc.calculateCost();
    }

}

驱动程序类:

public class CostCalculator {

    public void calculateCost(){
       Calculator calculator = new Calculator();
       calculator.calculator();
       Calculator years = new Calculator();
       years.years();
       Calculator inflation = new Calculator();
       inflation.inflation();     
       Calculator price = new Calculator();  
       price.price();


}
}

奇异类:

package priceestimator;

import java.util.Scanner;

public class Calculator {
    private Scanner myScanner = new Scanner(System.in);       
    private double cost;
    private double time;
    private double costDif;     

    private void setTime(int time){
        this.time = time;
    }
    private double getTime(){
        return time;
    }        
    private void setCost(double cost){
        this.cost = cost;
    }
    private double getCost(){
        return cost;
    }
    private void setCostDif(double costDif){
        this.costDif = costDif;
    }
    private double getCostDif(){
        return costDif;
    }
    private void getMyScanner(){
       this.myScanner = myScanner;
  }
    public void calculator(){
        System.out.println("Enter the current cost (numbers only):");
        cost = myScanner.nextDouble();                
   } 
    public void years(){
        System.out.println("Enter the time difference in years:");
        time = myScanner.nextDouble();        
  }
    public void inflation(){
        double costTimeDif;
        double decimalConversion; 
        int percent = 100;
        double input; 
        System.out.println("Enter the current inflation rate percentage (numbers only):");
        input = myScanner.nextDouble(); 
        decimalConversion = input / percent;
        costTimeDif = time * decimalConversion;
        costDif = cost * costTimeDif;                
    }

     public void price(){  
        double price;
        price = costDif + cost;
        System.out.println("The estimated price is: $" + price);

    }    

}

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

您在Calculator中使用calculateCost()的不同实例。使用相同的实例获取所有详细信息并计算最终价格。

public void calculateCost(){
    Calculator calculator = new Calculator();
    calculator.calculator();
    calculator.years();
    calculator.inflation();     
    calculator.price();
}

当您使用不同的实例时,每个实例都有自己的实例变量副本(您最终用它来计算最终价格),这就是为什么每个实例只填充该特定值。使用相同的实例将通过调用各种方法填充所有值,因此,将使用您通过不同方法输入的所有值来计算价格。

答案 1 :(得分:0)

你有:

   Calculator calculator = new Calculator();
   calculator.calculator();
   Calculator years = new Calculator();
   years.years();
   Calculator inflation = new Calculator();
   inflation.inflation();     
   Calculator price = new Calculator();  
   price.price();

您正在为输入的每条信息创建不同的 Calculator。每个都独立于其他人。相反,你的意思是:

   Calculator calculator = new Calculator();
   calculator.calculator();
   calculator.years();
   calculator.inflation();     
   calculator.price();

每个Calculator都有自己的实例字段副本(默认情况下它们初始化为0)。例如设定一个时间差不会影响其他人设定的时差。

您实例化的对象应该在概念上反映您要执行的操作。你打算有4个独立的计算器吗?或者您打算使用包含所有信息的单个计算器?当然,它是后者 - 你的代码应该反映出来。