我到处都找过了,但没有看到这样的事情。我对java相当陌生,并且有作业。作业是图书馆。它有新的和二手的书籍和 DVD。我想比较一个物体来确定正确的罚款。
我基本上是在问程序,嘿,这是一本书还是一张 DVD?然后嘿,这是一本新书或 DVD,还是一本旧书。
public double isLate(LocalDate argDateCheckedOut, LIBRARYMATERIALS argMaterial)
{
LocalDate dateCheckedIn = LocalDate.now();
double diff=ChronoUnit.DAYS.between(argDateCheckedOut, dateCheckedIn);
double fine = 0;
if(argMaterial.equals(BOOK))
{
//calculate fine for book
if(argMaterial.getisNew() == true)
{
if(diff > 21)
{
fine = 1 + .25*diff;
}
}
else if(argMaterial.getisNew() == false)
{
if(diff > 28)
{
fine = .25 * diff;
}
}
}
else if(argMaterial.equals(DVD))
{
//calculate fine for dvd
if(argMaterial.getisNew() == true)
{
if(diff > 3)
{
fine = 5 + diff;
}
}
else if(argMaterial.getisNew() == false)
{
if(diff > 7)
{
fine = diff;
}
}
}
return fine;
}
最佳答案
我会考虑以不同的方式进行连接。我会为 Book 和 DVD 创建一个父类或接口(interface)(称为“LibraryResource”)一个公共(public)双 getFine() 方法,也许将其抽象化,然后我会让 Book 和 DVD 重写父方法。让对象自己算算吧,而不是为难自己。
例如,如果你有这样一个父类:
public abstract class LibraryResource {
private LocalDate checkOutDate;
private boolean newResource;
abstract public double calculateFine(); // **** make this abstract ****
public LibraryResource(LocalDate checkOutDate, boolean newResource) {
this.checkOutDate = checkOutDate;
this.newResource = newResource;
}
public boolean isNewResource() {
return newResource;
}
public void setNewResource(boolean newResource) {
this.newResource = newResource;
}
public LocalDate getCheckOutDate() {
return checkOutDate;
}
}
然后,书籍和 DVD 都可以有自己的罚款计算公式。例如,Book 类可能类似于:
public class Book extends LibraryResource {
private static final long SHORT_OVER_DUE_DIFF = 21;
private static final long LONG_OVER_DUE_DIFF = 28;
public Book(LocalDate checkOutDate, boolean newResource) {
super(checkOutDate, newResource);
}
@Override
public double calculateFine() {
double fine = 0.0;
LocalDate dateCheckedIn = LocalDate.now();
long diff = ChronoUnit.DAYS.between(getCheckOutDate(), dateCheckedIn);
if (isNewResource()) {
if (diff > SHORT_OVER_DUE_DIFF) {
fine = 1 + 0.25 * diff;
} else if (diff > LONG_OVER_DUE_DIFF) {
// .... ??
}
} else {
// else it is NOT new
if (diff > SHORT_OVER_DUE_DIFF) {
// .... ??
} else if (diff > LONG_OVER_DUE_DIFF) {
fine = 0.25 * diff;
}
}
return fine;
}
}
关于java - 如何比较在不同子类中创建的两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43130705/