Я изучаю Java и работаю над базовой программой, в которой пользователь может ввести показатель стоимости, процент инфляции и время (годы), чтобы рассчитать стоимость, включая инфляцию.
Я использую три класса: 1 класс приложения, 1 класс драйвера и 1 особый класс. Я делаю это в соответствии с книгой, чтобы создавать навыки ООП (я знаю, что существуют более простые процедурные/структурированные методы, но это не главное для моего упражнения).
Проблема, с которой я столкнулась, что выходной ответ равен $ 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);
}
}
Спасибо за ваше время.
У тебя есть:
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 отдельных калькулятора? Или было ваше намерение иметь один калькулятор со всей информацией? Конечно, это был последний - и ваш код должен это отразить.
Вы используете разные экземпляры Calculator
в calculateCost()
. Используйте тот же экземпляр, чтобы получить все детали и рассчитать окончательную цену.
public void calculateCost(){
Calculator calculator = new Calculator();
calculator.calculator();
calculator.years();
calculator.inflation();
calculator.price();
}
Поскольку вы используете разные экземпляры, каждый экземпляр имеет свою собственную копию переменных экземпляра (которую вы в конечном счете используете для вычисления конечной цены), и поэтому для каждого экземпляра заполняется только эта конкретная ценность. Использование одного и того же экземпляра будет заполнять все значения, вызывая различные методы, и, следовательно, цена будет рассчитываться с использованием всех значений, введенных вами с помощью разных методов.