Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于循环,在第一次运行时什么都不做?可能的编程逻辑错误?_Java_Loops_For Loop_Logic - Fatal编程技术网

Java 对于循环,在第一次运行时什么都不做?可能的编程逻辑错误?

Java 对于循环,在第一次运行时什么都不做?可能的编程逻辑错误?,java,loops,for-loop,logic,Java,Loops,For Loop,Logic,基本上,在下面的方法中,由于我或我的团队不知道的原因,最外层的for循环在第一次执行时不会执行任何代码。我的意思是,在第一轮执行时,它进入循环的末尾并返回到开始,而不执行任何代码。我已经通过eclipse调试确认了这一点。但是,循环在第一个循环后正常执行 这个方法所做的是从数据库中提取天数,将其转化为周,然后将这些周转化为一个月。但是,由于这一奇怪的“小故障”,第一个周期没有抽出任何天数,随后也没有创建一个星期放在月份中,但它确实执行了循环计数器,基本上使数据与循环不同步: 1st run: n

基本上,在下面的方法中,由于我或我的团队不知道的原因,最外层的for循环在第一次执行时不会执行任何代码。我的意思是,在第一轮执行时,它进入循环的末尾并返回到开始,而不执行任何代码。我已经通过eclipse调试确认了这一点。但是,循环在第一个循环后正常执行

这个方法所做的是从数据库中提取天数,将其转化为周,然后将这些周转化为一个月。但是,由于这一奇怪的“小故障”,第一个周期没有抽出任何天数,随后也没有创建一个星期放在月份中,但它确实执行了循环计数器,基本上使数据与循环不同步:

1st run: nothing
2nd run: 1st week
3rd run: 2nd week
...
last run: SECOND LAST WEEK
因此,每次该方法返回月份时,总是缺少最后一周

但真正奇怪的是,这个循环曾经工作得很好。事实上,我99.9999%肯定它在我昨晚回家之前就已经正常工作了,而当我今天进来的时候,它突然出现了这个错误。我有那么一点点怀疑的唯一原因是,这种情况绝对没有意义!所以现实地说,我一定是无意中改变了什么,但没有意识到。如果有人能看看这一点,并提出一个可能的原因,将不胜感激

谢谢

private Month translateToFormData(List<WeekEntry> weekList, TimeSheetForm timeSheetForm) {
    int monthOfInterest = timeSheetForm.getMonth().getMonthOfYear();
    // month to be returned
    Month month = new Month();
    // Calendars to translate from Date to Calendar
    // loop through weekList
    for (WeekEntry weekEntry : weekList) {
        // week value to be filled
        Week week = new Week();
        Calendar calWeekBeginning = new GregorianCalendar();
        // set the date of the first day in "week" (Sunday)
        calWeekBeginning.setTime(weekEntry.getWeekBeginning());
        week.setWeekBeginning(calWeekBeginning);
        Set<DayEntry> daySet = weekEntry.getDays();
        // Loop through days of the weekList items
        for (DayEntry dayEntry : daySet) {
            // day value to be filled
            Day day = new Day();
            Calendar calDateOfDay = new GregorianCalendar();
            // set the date of the day
            calDateOfDay.setTime(dayEntry.getDateOfDay());
            day.setDate(calDateOfDay);
            // set the hours of the day
            day.setWorkHours(dayEntry.getHours());
            // define the day type
            if (calDateOfDay.get(Calendar.MONTH) != monthOfInterest) {
                day.setType(DayType.BLANK_DAY);
            } else if (calDateOfDay.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || calDateOfDay.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                day.setType(DayType.WEEK_END);
            } else {
                day.setType(DayType.WEEK_DAY);
            }
            // add the day to the week
            week.addDay(day);
        }
        // add the week to the month
        month.addWeek(week);
    }
    return month;
}
private Month translateToFormData(列表周列表、时间表格式时间表格式){
int monthOfInterest=timeSheetForm.getMonth().getMonthOfYear();
//返回月份
月份=新月份();
//要从日期转换为日历的日历
//循环浏览周报
for(WeekEntry WeekEntry:weekList){
//要填写的周值
周=新的一周();
日历calWeekBeginning=新的GregorianCalendar();
//设置“周”(星期日)中第一天的日期
setTime(weekEntry.getWeekBeginning());
week.setWeekBeginning(calWeekBeginning);
Set daySet=weekEntry.getDays();
//循环浏览周列表项目的日期
对于(DayEntry DayEntry:daySet){
//要填写的日值
每日=新的一天();
日历calDateOfDay=新的GregorianCalendar();
//设定一天的日期
setTime(dayEntry.getDateOfDay());
day.setDate(calDateOfDay);
//设定一天的时间
day.setWorkHours(dayEntry.getHours());
//定义日期类型
如果(calDateOfDay.get(Calendar.MONTH)!=月利息){
day.setType(DayType.BLANK_day);
}else if(calDateOfDay.get(Calendar.DAY OF_WEEK)=Calendar.SATURDAY | calDateOfDay.get(Calendar.DAY OF_WEEK)=Calendar.SUNDAY){
day.setType(DayType.WEEK\u END);
}否则{
day.setType(DayType.WEEK\u-day);
}
//将日期添加到周中
周.日(天);
}
//将周添加到月份
月.周(周);
}
返回月份;
}

我想写一条评论,但我没有要点。我认为您需要提供更多的代码。你应该发送周报和时间表的内容。这些课程有什么变化吗


(想一想——这类问题是一个很好的例子,说明了为什么您需要自动化测试用例;一旦失败,您就可以看到。)

发现了问题,是因为我是一个herpaderp!谢谢你的建议

应克里斯的要求编辑


事实证明,这与我如何将对象保存到数据库有关。它在每一行上都加上了一个时间戳,如果代码在一天中较早的时间运行,那么当条目最初保存时,它就无法检索第一个元素。我不知道为什么这只是循环的第一个周期受到影响,但一旦我将其设置为保存项目而不记录一天中的时间,它就会毫无问题地运行。

这不是一个“为我工作”的网站。你的理论是什么?你淘汰了什么?将代码缩减到相关的部分-不要给我们大量的源代码转储!吼叫声当然,如果您只是一步一步地进行,您应该看到发生了什么?for-each循环只是使用迭代器的语法糖。您是否尝试过直接使用迭代器?也许,
weekList
对象有问题。验证集合是否具有正确的/预期的值。使用VCS检查您昨晚回家后在代码中所做的更改。如果没有,请检查数据库是否仍然包含正确的数据。然后继续编写一个单元测试,它暴露了当前的失败。是的,上面的评论中已经提出了测试用例,我现在正在研究它们——1,感谢您添加一个原因。所以说得很清楚,发布的代码很好,问题是其他地方的代码?