Java中的基础数学

Basic maths in Java

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

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

问题是,不管我输入的数字是多少,输出答案都是0美元。显然情况并非如此。如果有人能浏览一下我的代码,指出正确的方向,我会感激的。

应用程序类:

1
2
3
4
5
6
7
8
9
10
    package priceestimator;

 public class PriceEstimator {

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

}

驱动程序类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();


}
}

奇异类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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);

    }    

}

谢谢你的时间。


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

1
2
3
4
5
6
7
public void calculateCost(){
    Calculator calculator = new Calculator();
    calculator.calculator();
    calculator.years();
    calculator.inflation();    
    calculator.price();
}

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


你有:

1
2
3
4
5
6
7
8
   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。每一个都是独立的。相反,你的意思是:

1
2
3
4
5
   Calculator calculator = new Calculator();
   calculator.calculator();
   calculator.years();
   calculator.inflation();    
   calculator.price();

每个Calculator都有自己的实例字段副本(默认情况下初始化为0)。设置,例如一个时间差不影响另一个时间差设置。

您实例化的对象在概念上应该反映您正在尝试做的事情。你打算用4台独立的计算器吗?或者你打算用一个包含所有信息的计算器?当然,这是后者——您的代码应该反映出这一点。