我正在学习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);
}
}
感谢您的时间。
答案 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个独立的计算器吗?或者您打算使用包含所有信息的单个计算器?当然,它是后者 - 你的代码应该反映出来。