我正在进行打卡/打卡式打字计划。我这样做是为了练习我的编码。我刚刚完成了Java 1课程,所以我对Java的广泛性知之甚少。因此,我的代码将使用许多技术和方法,可以通过更先进的技术更换和更有效地完成,但现在这不是我想要的。
我有一个班级,我有最杂乱的方法。在本课程中,我创建了员工,我允许他们办理登机手续,并允许他们退房。每张入住和退房都打印到一个文件。作为我的程序的一部分,我有一个方法来找出时间和超时之间的差异,并给出经过的时间以及将其打印到文件。
程序完美地显示控制台中经过的时间,但是当它写入文件时,它会打印出null。在我计算经过时间的方法中,我不明白为什么if语句中的return语句被忽略,而是直接返回null而不是返回正确的经过时间。我null
的原因是因为我的编译器告诉我添加它因为它缺少return语句。
public static String timeOut() {
Date startDate;
Date endDate;
for (int i = 0; i < date.size(); i = i + 1) {
for (int j = 0; j < date2.size(); j = j + 1) {
if (date.get(i).getAcctNumber().equals(date2.get(j).getAcctNumber())) {
startDate = date.get(i).getDate();
endDate = date2.get(j).getDate();
long duration = endDate.getTime() - startDate.getTime();
// This is a continues program that doesn't close, so i remove the
// values from array after i use them to avoid confusion when finding
// the time elapsed. Otherwise the array will be to big and have
// duplicates
date.remove(i);
date2.remove(j);
long diffSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
if (diffSeconds < 60) {
return "You have been out for " + diffSeconds + " Seconds ";
}
if (diffSeconds > 60 && diffSeconds < 3600) {
long diffMinutes = (diffSeconds / 60);
long difference = TimeUnit.MINUTES.toSeconds(diffMinutes);
diffSeconds = (diffSeconds - difference);
return "You have been out for " + diffMinutes + " Minutes "
+ " and " + diffSeconds + " Seconds ";
}
else if (diffSeconds >= 3600) {
long diffMinutes = (diffSeconds / 60);
long diffHours = (diffMinutes / 60);
long difference = TimeUnit.MINUTES.toSeconds(diffMinutes);
diffSeconds = (diffSeconds - difference);
long diff = TimeUnit.HOURS.toMinutes(diffHours);
diffMinutes = (diffMinutes - diff);
return "You have been out for " + diffHours + "Hours: "
+ diffMinutes + " :Minutes " + diffSeconds + " :Seconds";
}
}
else {
continue;
}
}
}
return null;
}
上面是我的“找时间过去”方法,我想知道为什么它会将null
打印到文件中。请注意我在我的代码的另一部分中调用此方法。我写文件如下:
File log = new File("log.txt");
FileWriter s = new FileWriter("log.txt", true);
PrintWriter q = new PrintWriter(s);
for (int j = 0; j < emp.size(); j++) {
if (emp.get(j).getAcctNumber().equals(en)) {
q.println(emp.get(j) + " " + "Checked OUT on:" + " " + d + " " + timeOut());
}
}
q.close();
这只是我签到方法的一小部分,用户可以在其中重新登录系统。它显示了我如何将它写入文件。 以下是文件中的输出:
Parker,Peter 55签出:2014年5月12日星期一20:42:07 EDT 2014
Parker,Peter 55入选:星期一5月12日20:42:11 EDT 2014 null
我真的不知道发生了什么,我觉得它有一个简单的解决方案,但我搜索并排除故障,但没有用。
public class DatesCLI {
public String empnum;
public Date d = new Date();
public DatesCLI(String en, Date date) {
d = date;
empnum = en;
}
@Override
public String toString() {
return String.format(empnum) + " " + d;
}
public Date getDate() {
return d;
}
public String getAcctNumber() {
return empnum;
}
}
这些是我创建的数组:
private static ArrayList<DatesGUI> date = new ArrayList<>();
private static ArrayList<DatesGUI> date2 = new ArrayList<>();
答案 0 :(得分:0)
我的建议是使用调试器运行代码。我觉得你的代码没有在你的TimeOut函数中运行if语句。如果发生这种情况,您很可能输出null。
我确实意识到你差不多30天前发布了这个问题,如果你想知道它让我知道并且生病了,试着再深入了解你。