Вычисление, возвращающее 0.0

#java

#java

Вопрос:

У меня возникли некоторые проблемы с назначением для моего класса Java. Мой расчет numCredits * creditFee addFee не обрабатывается; он продолжает возвращать 0.0

Назначение:

Скриншот назначения

(Обратите внимание, я еще не добавил дополнительные части задания, добавление и вычитание 3 кредитных часов в RegistrationTester. Я добавлю их, как только разберусь с этой проблемой.)

Вот посмотрите на мой код:

 public class Registration {
    //attributes
private String firstName = ""; 
private String lastName = "";
private double numCredits = 0;
private double addFee = 0;
private double creditFee = 70;
public double balance = 0;

//constructor
public Registration(String firstName, String lastName, double numCredits, double addFee){
    this.firstName = firstName;
    this.lastName = lastName;
    this.numCredits = numCredits;
    this.addFee = addFee;
}

public Registration(){} //
 public void balance(double balance){
   System.out.println(numCredits * creditFee   addFee);
 }
   public void addCredit(double addCredit){
   if (this.balance > 0) {
   this.balance = balance   addCredit * creditFee;
   }
   }
   
   public void subCredit(double subCredit){
   if (this.balance > 0){
   this.balance = balance - (subCredit * creditFee);
   }
   }
//setters
public void setFirstName(String fname){
    this.firstName = fname;
}
public void setLastName(String lname){
    this.lastName = lname;
}
public void setNumCredits(double credits){
    this.numCredits = credits;
   }
   public void setAddFee(double fee){
   this.addFee = fee;
   }
   public void setcreditFee(double creditFee){
   this.creditFee = 70;
   }
   public void setBalance(double balance){
   this.balance = balance;
   }
   
    //getters
   
   public String getFirstName(){
   return this.firstName;
   }
   public String getLastName(){
       return this.lastName;
   }
   public double getNumCredits(){
   return this.numCredits;
   }
   public double getAddFee(){
   return this.addFee;
   }
   public double getCreditFee(){
   return this.creditFee;
   }
  public double getBalance(){
      return this.balance;
  }
   
}
  

и

 public class RegistrationTester {
    public static void main(String[] args){
    Registration student1 = new Registration ("m", "w", 15, 60);
    Registration student2 = new Registration ("d", "y", 12, 45);
    
    //display students and their current stats
    
    System.out.printf("%s %s:%n Current Credit Hours: %f%n Additional Fees: $%.2f%n"
              "Current balance due: $ %.2f%n", 
            student1.getFirstName(),student1.getLastName(), student1.getNumCredits(), student1.getAddFee(),
            student1.getBalance());
    System.out.printf("%s %s:%n Current Credit Hours: %f%n Additional Fees: $%.2f%n"
              "Current balance due: $ %.2f%n", 
            student2.getFirstName(), student2.getLastName(), student2.getNumCredits(), student2.getAddFee(),
            student2.getBalance());        
        
}
}
  

Комментарии:

1. Удалите if (this.balance > 0) { из addCredit() , иначе нет возможности balance когда-либо увеличиваться с нуля, который является его начальным значением.

2. «Мой расчет numCredits * creditFee addFee не обрабатывается» По вашим собственным словам, почему вы думаете, что это «должно обрабатываться», и каким, по вашему мнению, должен быть результат? Проследите логику от начала до конца и точно объясните, что вы ожидаете, что произойдет в каждой функции. Затем посмотрите на имеющийся у вас код и попытайтесь соотнести то, что, по словам кода, произойдет, с тем, что вы на самом деле хотите, чтобы произошло.

3. Совсем не ясно, как вы собираетесь использовать balance метод для работы. Почему он принимает параметр, который также имеет имя balance ? Какое значение вы там предоставите и какое это имеет отношение к работе метода? Почему вычисление numCredits * creditFee addFee сообщает вам что-либо важное здесь — какова основная проблема, которую вы пытаетесь решить ? Какова основная концепция, которую вы пытаетесь смоделировать ?

4. Я согласен, но я думаю, что новичкам лучше рассказать о шагах отладки, прежде чем им будут даны ответы.

5. @KarlKnechtel Hm. Да, я согласен, хотя иногда в ответе действительно происходит «обсуждение».

Ответ №1:

Метод 1: правильная настройка баланса

Баланс всегда возвращается 0.0 , потому что вы никогда не устанавливаете баланс в своем методе.

Я считаю, что ваш метод баланса должен быть:

  public void balance(double balance){
   this.balance=(numCredits * creditFee   addFee);
 }
  

Метод 2: возврат баланса

Вы можете заменить student1.getBalance() в RegistrationTest.java с student1.balance() это возвращает двойное значение.

RegistrationTest должен быть:

 System.out.printf("%s %s:%n Current Credit Hours: %f%n Additional Fees: $%.2f%n"
          "Current balance due: $ %.2f%n", 
        student1.getFirstName(),student1.getLastName(), student1.getNumCredits(), student1.getAddFee(),
        student1.balance());
  

И метод balance() должен быть:

  public double balance(){
   return (numCredits * creditFee   addFee);
 }
  

С этими изменениями он выводит:

 Mihail Dichev:
 Current Credit Hours: 15.000000
 Additional Fees: $60.00
Current balance due: $ 1110.00
Dene Logan:
 Current Credit Hours: 12.000000
 Additional Fees: $45.00
Current balance due: $ 885.00
  

Комментарии:

1. Спасибо за вашу помощь! В какой-то момент у меня действительно был общедоступный недействительный баланс (двойной баланс) { this.balance = numCredits * creditFee addFee без функции (). Но мне также не хватало инструкции return. По какой-то причине в RegistrationTester student1.balance() не будет работать, но student1.getBalance() будет. Я получал сообщение об ошибке, в котором указывалось, что метод и тип не совпадают. Это также поможет мне с двумя другими частями моего задания. Большое вам спасибо.

2. «По какой-то причине» вам нужно, чтобы все совпало. Если вы вызвали метод something в одном месте, вам нужно использовать это же имя в другом месте, иначе вы на самом деле не ссылаетесь на него. Если вы хотите, чтобы метод возвращал определенный тип значения, то вам нужно а) фактически вернуть значение, которое на самом деле является этим типом, и б) явно объявить , что метод возвращает этот тип.