Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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 如何增加daysOfWeek和day,检查它们是否溢出,并根据需要重置_Java_Date_Increment_Dayofweek - Fatal编程技术网

Java 如何增加daysOfWeek和day,检查它们是否溢出,并根据需要重置

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

我正在尝试编写从第1天(以及任何碰巧的工作日)开始并连续打印的代码。例如,如果Friday为1,它应该下一次打印Saturday 2,然后继续按正常方式计算天数,但将DayOfWeek重置为Sunday

我目前的代码是:

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
    e
    int
    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