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); } } |
谢谢你的时间。
您在
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(); |
您正在为输入的每一条信息创建不同的
1 2 3 4 5 | Calculator calculator = new Calculator(); calculator.calculator(); calculator.years(); calculator.inflation(); calculator.price(); |
每个
您实例化的对象在概念上应该反映您正在尝试做的事情。你打算用4台独立的计算器吗?或者你打算用一个包含所有信息的计算器?当然,这是后者——您的代码应该反映出这一点。