无法为Calendar添加天数:有声图书到期日显示异常求助
解决有声图书到期日始终显示固定值的问题
嘿,从你描述的情况来看,问题几乎肯定出在到期日的赋值或者toString()的引用逻辑上!咱们来拆解一下可能的原因和修复方法:
最常见的坑:硬编码了到期日
先看你给出的toString()片段,到期日部分是不是直接写死成3/5了?比如代码是这样的:
str += "\n\t Due Date: 3/5";
如果是这样,那不管你怎么设置借阅时间,toString()都会输出这个固定值——这完全是硬编码的锅!你需要把这里改成引用存储到期日的实例变量,比如dueDate。
第二个可能:到期日变量没被正确赋值
如果你已经有dueDate这个变量,那大概率是你在借阅图书时没有计算并更新它。比如你需要在借阅方法里做这样的操作(以Java为例):
// 假设你的Book类有一个LocalDate类型的dueDate成员变量 public void checkOut() { // 计算当前日期加14天,赋值给当前图书的到期日 this.dueDate = LocalDate.now().plusDays(14); }
要是你从来没调用过类似的方法给dueDate赋值,它就会保持初始值(比如你测试时写的3/5),自然不会变。
第三个坑:误用了静态变量
如果你把dueDate定义成了static类型:
private static LocalDate dueDate;
那所有图书对象都会共享这同一个到期日变量——一旦某个操作把它设成3/5,所有图书的toString()都会显示这个值。解决方法就是去掉static,让每本图书都有自己的dueDate实例变量。
修复后的完整toString()示例
最后给你一个正确的toString()写法参考:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class Audiobook { private String title; private String narrator; private int year; private LocalDate dueDate; // 实例变量,非静态 // 借阅方法 public void checkOut() { this.dueDate = LocalDate.now().plusDays(14); } @Override public String toString() { // 可以把日期格式化成更友好的形式,比如MM/dd/yyyy DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); String formattedDueDate = dueDate != null ? dueDate.format(formatter) : "Not checked out"; String str = "\nThe specs of this audiobook are: "; str += "\n\t Title: " + title; str += "\n\t Narrator: " + narrator; str += "\n\t Year: " + year; str += "\n\t Due Date: " + formattedDueDate; return str; } }
这样调整后,每次调用checkOut()方法,图书的到期日就会被设置成当前日期加14天,toString()也会正确显示这个动态计算的值啦!
内容的提问来源于stack exchange,提问作者ElijahLee Hedrick
相关产品推荐
相关产品推荐

