Основы математики на Java

1

Я изучаю 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);

    }    

}

Спасибо за ваше время.

Теги:

2 ответа

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 отдельных калькулятора? Или было ваше намерение иметь один калькулятор со всей информацией? Конечно, это был последний - и ваш код должен это отразить.

  • 1
    Отлично. Большое спасибо.
3

Вы используете разные экземпляры Calculator в calculateCost(). Используйте тот же экземпляр, чтобы получить все детали и рассчитать окончательную цену.

public void calculateCost(){
    Calculator calculator = new Calculator();
    calculator.calculator();
    calculator.years();
    calculator.inflation();     
    calculator.price();
}

Поскольку вы используете разные экземпляры, каждый экземпляр имеет свою собственную копию переменных экземпляра (которую вы в конечном счете используете для вычисления конечной цены), и поэтому для каждого экземпляра заполняется только эта конкретная ценность. Использование одного и того же экземпляра будет заполнять все значения, вызывая различные методы, и, следовательно, цена будет рассчитываться с использованием всех значений, введенных вами с помощью разных методов.

  • 1
    Вот и все. Большое спасибо!
  • 1
    +1 Помните, @WadeG, ваш код должен отражать ваши намерения. Было ли у вас намерение создать 4 отдельных калькулятора? Или вы хотели создать единый калькулятор, который бы содержал всю информацию?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню