在Java中的基本数学计算

20 浏览
0 Comments

在Java中的基本数学计算

我正在学习Java,并且正在开发一个基本程序,用户可以输入一个成本金额、通胀百分比和时间(年份),以便计算包含通胀的成本。\n我使用了三个类,1个应用程序类,1个驱动程序类和1个单一类。我这样做是为了按照书本上的要求来构建面向对象的技能(我知道还有更简单的过程化/结构化方法,但这不是我练习的重点)。\n我遇到的问题是,无论我输入什么数字,输出的答案都是0美元。这显然不应该是这样的。如果有人能够请快速浏览我的代码并指点我方向,我将不胜感激。\n应用程序类:\n

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

\n驱动程序类:\n

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();
    }
}

\n单一类:\n

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);
    }    
}

\n感谢您的时间。

0
0 Comments

在上述代码中,问题出在每次输入信息时都创建了一个新的Calculator对象,而每个对象都是独立的。所以,每个对象都有自己的实例字段,并且默认情况下初始化为0。因此,在一个对象中设置例如时间差不会影响其他对象中设置的时间差。

为了解决这个问题,应该只创建一个Calculator对象,并在该对象上进行操作。这样,所有的信息都在同一个对象中保存,而不是分散在多个对象中。

所以,你的意图是拥有一个包含所有信息的单个计算器,因此你的代码应该反映这一点。

0
0 Comments

问题的原因是在calculateCost()方法中使用了不同的Calculator实例。解决方法是使用相同的实例来获取所有的细节并计算最终价格。

你使用了不同的实例,每个实例都有自己的实例变量的副本(最终用于计算最终价格),这就是为什么对于每个实例只有特定的值被填充。使用相同的实例将通过调用不同方法来填充所有的值,因此价格将使用通过不同方法输入的所有值进行计算。

要记住,你的代码应该反映你的意图。你的意图是创建4个单独的计算器吗?还是你的意图是创建一个保存所有信息的单个计算器?

最后,为了便于以后的维护,从学习的角度来看,我认为使用单个计算器更有意义。

0