В настоящее время я участвую в подготовке программы аренды тракторов, и до сих пор у меня есть основной метод, который проверяет трактор и класс Трактора. Сначала я вывешу класс трактора, чем я вывешу основной метод:Получение неожиданного вывода из моей программы
Трактор Класс:
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)
Там что-то не так с дизайном, что 'RentalProfit' методы: он вычисляет значения на основе значений полей, которые не обязательно соответствуют полям класса (но вы можете использовать значения полей и удалить параметры метода). Также вы вычисляете и сохраняете значение здесь и никогда не используете его, кроме метода toString, который является плохим по различным причинам: этот метод похож на метод getter, но другой toString полагается на вызываемый метод (что не обязательно так) ; поэтому значение в поле не может быть актуальным. – fabian
царапины, что я понял, спасибо за помощь, мне пришлось установить его как набор и получить метод, чем добавить tractor.setRentalProfit(); в моем основном методе – ried
Дело в том, что не должен быть установлен метод, а не поле. Замените все применения этого поля с использованием геттера (который пересчитывает значение каждый раз, основываясь на значениях других полей). Таким образом, ценность всегда актуальна. Альтернативой будет сохранение поля и добавление метода recalculateRentalProfit' и вызов его каждый раз, когда стоимость аренды зависит от набора (в сеттерах). – fabian