Java 如何增加daysOfWeek和day,检查它们是否溢出,并根据需要重置
我正在尝试编写从第1天(以及任何碰巧的工作日)开始并连续打印的代码。例如,如果Friday为1,它应该下一次打印Saturday 2,然后继续按正常方式计算天数,但将DayOfWeek重置为Sunday 我目前的代码是:Java 如何增加daysOfWeek和day,检查它们是否溢出,并根据需要重置,java,date,increment,dayofweek,Java,Date,Increment,Dayofweek,我正在尝试编写从第1天(以及任何碰巧的工作日)开始并连续打印的代码。例如,如果Friday为1,它应该下一次打印Saturday 2,然后继续按正常方式计算天数,但将DayOfWeek重置为Sunday 我目前的代码是: String[] dayOfTheWeek ={“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}; int[] days ={31} for(int days=1; day
String[] dayOfTheWeek ={“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”};
int[] days ={31}
for(int days=1; days<32; days=days++){
for(String dayOfTheWeek=5; dayOfTheWeek<7; dayOfTheWeek=dayOfTheWeek++){
System.out.println(dayOfTheWeek" " days)
}
}
String[]dayofweek={“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”};
int[]天={31}
对于(int days=1;days而言,从3个变量开始:
int dayOfWeekIdx=5/*Friday*/;
int-monthIdx=0/*一月*/;
整日=1;
现在,使用两个xxxIdx
变量作为索引打印第一个日期到daysOfTheWeek
和months
数组中
增加Weekidx的dayOfWeekIdx
和day
。检查它们是否溢出,并根据需要重置为0
如果day
溢出,则增加monthIdx
。如果溢出,则退出
循环打印下一个日期。这是一个很好的练习。只是为了更大的图景,在现实生活中,生产代码没有人会用到它
基本上有两种方法,两种方法都可以
使用两个嵌套循环。外部循环将在一年中的几个月内迭代。内部循环将在一年中的几天内迭代
在一年中的几天内使用一个循环
在这两种情况下,您还需要全程跟踪一周中的某一天。再次编辑:如果您知道Java中的enum
,请在月份使用一个enum,在一周中的某几天使用另一个enum。如果您不知道enum,正如Andreas已经提到的,请在每个月、每月的某一天和每周的某一天使用int
eint
s用于查找数组中的字符串。因为int
可以递增,而且数组索引是int
s
进一步编辑:为了回答标题中的问题,假设您使用int
索引到dayofweek
来表示一周中的第二天。有几种方法可以增加打印的每一天。我觉得这种方法自然而简单:
dayOfWeekIdx++;
if (dayOfWeekIdx == dayOfTheWeek.length) { // Overflown
dayOfTheWeek = 0; // Reset
}
有些人更喜欢这种短得多的方式:
dayOfTheWeek = (dayOfTheWeek + 1) % dayOfTheWeek.length;
模运算符,%
给出除法后的余数。因此,当DayOfWeek
溢出时,即变为7,除法是7除以7,即1,余数为0,因此DayOfWeek
重置为0
在一年中所有日期都有一个循环的版本中,您可以对一周中的某一天执行类似于四行的解决方案,仅在if
语句中添加一行以增加月索引
那么生产代码将使用什么呢?这主要是给其他读者的。我们将使用LocalDate
和DateTimeFormatter
,这两个版本都来自java.time,即现代java日期和时间API。没有一个头脑正常的人会使用date
或Calendar
,您在e问题,因为它们设计拙劣,而且早已过时
我试着写一个从第一天开始的代码(或者其他什么)
工作日(恰好是)并连续打印(例如,如果
星期五是1,它应该下星期六打印2,继续计数
这些天恢复正常,但将星期天重置为星期天
使用%
运算符,该运算符将为您提供余数的值。此外,使用列表
而不是字符串[]
可以更轻松地处理输入。具有丰富的API来处理输入w.r.t.它包含的元素
import java.util.List;
public class Main {
public static void main(String[] args) {
// Test
printDaysStartingWith("Tuesday");
}
static void printDaysStartingWith(String dayName) {
List<String> dayOfTheWeek = List.of("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday");
int index = dayOfTheWeek.indexOf(dayName);
if (index != -1) {
for (int day = index; day < 31; day++) {
System.out.println(dayOfTheWeek.get(day % 7));
}
} else {
System.out.println("Error: Wrong parameter.");
}
}
}
为什么不呢?你在实现这一点上遇到了什么困难?请阅读。如果你太迷茫了,甚至不知道如何开始设计和编码算法,我建议你和你的老师谈谈。@Mike'Pomax'Kamermans,我想一个好的开始是同时使用两个数组,那么我可能会找出至于我自己,让我们以1月为例,我将如何使用数组一起打印1月1日、1月2日、1月3日等等?我唯一可以尝试的方法是手动打印每个数字。为什么?您有一个每月天数的数组,名为daysInMonth
。因此您使用for循环开始在int day=1
时启动,并在打印day
后结束,该日期等于该月的天数。对于一月(即months[0]
),该月的天数为31天(位于daysInMonth[0]
).我在所有循环中都使用了类似的int,但我正在努力使用strings@MentalOverload您需要使用int
。然后使用int
查找要在数组中打印的字符串。这适用于每月和每周的某一天。我需要一段时间才能解决这个问题,但您一直是imm很有帮助很高兴看到你在与之抗争,正如我所说,这是一个很好的练习,所以你同时也在学习。我再次编辑,进一步解释了int
的用法。
Tuesday
Wednesday
Thursday
...
...
...
Monday
Tuesday