在if语句中返回语句并将其打印到文件中

时间:2014-05-13 00:46:22

标签: java if-statement return

我正在进行打卡/打卡式打字计划。我这样做是为了练习我的编码。我刚刚完成了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<>(); 

1 个答案:

答案 0 :(得分:0)

我的建议是使用调试器运行代码。我觉得你的代码没有在你的TimeOut函数中运行if语句。如果发生这种情况,您很可能输出null。

我确实意识到你差不多30天前发布了这个问题,如果你想知道它让我知道并且生病了,试着再深入了解你。