2016-03-04 2 views
-4

В настоящее время я участвую в подготовке программы аренды тракторов, и до сих пор у меня есть основной метод, который проверяет трактор и класс Трактора. Сначала я вывешу класс трактора, чем я вывешу основной метод:Получение неожиданного вывода из моей программы

Трактор Класс:

class Tractor 
{ 
    private int RentalRate; 
    private int RentalDays; 
    private int VehicleID; 
    private int RentalProfit; 

    public void setRentalRate(int r) 
    { 
     if (r > 0) { 
      this.RentalDays = r; 
     } else { 
      System.out.println("Error: bad RentalRate!"); 
     } 
     RentalDays = r; 
    } 

    public int getRentalRate() 
    { 
     return this.RentalRate; 
    } 

    public void setVehicleID(int v) 
    { 
     if (v > 0) { 
      this.VehicleID = v; 
     } else { 
      System.out.println("Error: bad VehicleID!"); 
     } 
     RentalDays = v;  
    } 

    public int getVehicleID() 
    { 
     return this.VehicleID; 
    } 

    public void setRentalDays(int d) 
    { 
     if (d > 0) { 
      this.RentalDays = d; 
     } else { 
      System.out.println("Error: bad Rental Days!"); 
     } 
     RentalDays = d;  
    } 

    public int getRentalDays() 
    { 
     return this.RentalDays; 
    } 

    public int RentalProfit(int RentalRate, int RentalDays) 
    { 
     RentalProfit = RentalRate * RentalDays; 
     return this.RentalProfit; 
    } 

    //Tractor(int RD, int RR, int RP, int VID) 
    //{ 
     //RentalDays = RD; 
     //RentalRate = RR; 
     //RentalProfit = RP; 
     //VehicleID = VID; 

    //} 


    @Override 
    public String toString() { 
     return "Tractor (Rental days = " + RentalDays + ", Rental Rate = " + RentalRate + 
     ", Rental profit = " + RentalProfit + ", VehicleID = " + VehicleID + ")"; 
    } 

Основной метод:

public static void main(String[] args){ 
      Tractor tractor; 
      tractor = new Tractor(); 
      tractor.setRentalRate(9); 
      tractor.setRentalDays(45); 
      tractor.setVehicleID(9145949); 
      System.out.println(tractor.toString()); 

см.ниже выходе программа дает мне, я «Я просматривал свой код несколько раз и не могу понять, почему это так.

Tractor (RentalDays = 9145949, Rental Rate = 0, Rental profit = 0, VehicleID 9145949) 
+0

Там что-то не так с дизайном, что 'RentalProfit' методы: он вычисляет значения на основе значений полей, которые не обязательно соответствуют полям класса (но вы можете использовать значения полей и удалить параметры метода). Также вы вычисляете и сохраняете значение здесь и никогда не используете его, кроме метода toString, который является плохим по различным причинам: этот метод похож на метод getter, но другой toString полагается на вызываемый метод (что не обязательно так) ; поэтому значение в поле не может быть актуальным. – fabian

+0

царапины, что я понял, спасибо за помощь, мне пришлось установить его как набор и получить метод, чем добавить tractor.setRentalProfit(); в моем основном методе – ried

+0

Дело в том, что не должен быть установлен метод, а не поле. Замените все применения этого поля с использованием геттера (который пересчитывает значение каждый раз, основываясь на значениях других полей). Таким образом, ценность всегда актуальна. Альтернативой будет сохранение поля и добавление метода recalculateRentalProfit' и вызов его каждый раз, когда стоимость аренды зависит от набора (в сеттерах). – fabian

ответ

0

Я предполагаю, что «странный результат», о котором вы говорили, заключается в том, что дни аренды равны идентификационному номеру автомобиля? Если да, см. Ниже.

public void setVehicleID(int v) 
{ 
    if (v > 0) { 
     this.VehicleID = v; 
    } else { 
     System.out.println("Error: bad VehicleID!"); 
    } 
    *****RentalDays = v;***** <-- This is why.  
} 
+0

Вау, вы люди быстры! –

1

Ваш метод setRentalRate неверен. В этом методе вы устанавливаете «RentalDays» вместо «RentalRate».

public void setRentalRate(int r) 
{ 
    if (r > 0) { 
     this.RentalDays = r; // Should be this.RentalRate = r; 
    } else { 
     System.out.println("Error: bad RentalRate!"); 
    } 
    RentalDays = r; // Should be RentalRate = r; 
} 

Кроме того, я смущен относительно того, почему вы назначили ему дополнительное время после if-else. Я думаю, что это должно быть что-то вроде этого:

public void setRentalRate(int r) 
{ 
    if (r > 0) { 
     this.RentalRate = r; 
    } else { 
     System.out.println("Error: bad RentalRate!"); 
     RentalRate = 0; 
    } 
} 
Смежные вопросы