Java 使用枚举查找星期几

Java 使用枚举查找星期几,java,enumeration,Java,Enumeration,我的代码要求用户输入一个整数值,如Sunday=0、Monday=1等,然后要求用户输入一个表示偏移日期的数字。从那里,程序找到对应于偏移量ie的日期 Enter today's day: 0 //Sunday Enter the number of days elapsed since today: 6 6 days from Sunday is Sunday 上述输出的问题是,由于我使用“%6”查找偏移日,因此它跳过了一天的值6 此外,我无法找到一种方法来查找输入的负偏移值的日期。即 En

我的代码要求用户输入一个整数值,如Sunday=0、Monday=1等,然后要求用户输入一个表示偏移日期的数字。从那里,程序找到对应于偏移量ie的日期

Enter today's day: 0 //Sunday
Enter the number of days elapsed since today: 6
6 days from Sunday is Sunday
上述输出的问题是,由于我使用“%6”查找偏移日,因此它跳过了一天的值6

此外,我无法找到一种方法来查找输入的负偏移值的日期。即

Enter today's day: 0 //Sunday
Enter the number of days elapsed since today: -2
-2 days from Sunday is Friday
这是我的密码

import java.util.Scanner ;

public class test {

public static void main (String[] args) {

Scanner Input = new Scanner(System.in);
    System.out.print("Enter today's day: ");
        int today = Input.nextInt();

System.out.print("Enter the number of days elapsed since today: ");
    int offset = Input.nextInt ();
        int offsetDay = 0;
        if (offset >= 0)
            offsetDay = (today + offset)% 6 ; //to get remainder and make it vary from 0 - 6            
        else if (offset < 0)
            offsetDay = (today - offset)% 6 ;


String todayText = null ;
String offsetText = null;

//Converting input integers into days in text for variable today
switch (today) {
    case 0 : todayText = "Sunday" ; break;
    case 1 : todayText = "Monday"; break;
    case 2 : todayText = "Tuesday"; break;
    case 3 : todayText = "Wednesday";break;
    case 4 : todayText = "Thrusday"; break;
    case 5 : todayText = "Friday"; break;
    case 6 : todayText = "Saturday"; break;
}

//Converting input integers into days in text for variable offset
switch (offsetDay) {
    case 0 : offsetText = "Sunday" ; break;
    case 1 : offsetText = "Monday"; break;
    case 2 : offsetText = "Tuesday"; break;
    case 3 : offsetText = "Wednesday";break;
    case 4 : offsetText = "Thrusday"; break;
    case 5 : offsetText = "Friday"; break;
    case 6 : offsetText = "Saturday"; break;
}

System.out.println(offset + " days from " + todayText + " is "  + offsetText);

}

}
import java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.print(“输入今天:”);
int today=Input.nextInt();
System.out.print(“输入从今天起经过的天数:”);
int offset=Input.nextInt();
int offsetDay=0;
如果(偏移量>=0)
offsetDay=(今天+偏移)%6;//获取余数并使其在0-6之间变化
否则如果(偏移量<0)
抵销日=(今天-抵销)%6;
字符串todayText=null;
字符串offsetText=null;
//将文本中的输入整数转换为变量today的天数
交换机(今天){
案例0:todayText=“Sunday”休息;
案例1:todayText=“周一”休息;
案例2:todayText=“周二”休息;
案例3:todayText=“周三”休息;
案例4:todayText=“Thrusday”中断;
案例5:todayText=“Friday”休息;
案例6:todayText=“周六”休息;
}
//在文本中将输入整数转换为可变偏移量的天数
开关(偏置日){
案例0:offsetText=“Sunday”休息;
案例1:offsetText=“周一”休息;
案例2:offsetText=“周二”休息;
案例3:offsetText=“周三”休息;
案例4:offsetText=“Thrusday”中断;
案例5:offsetText=“Friday”休息;
案例6:offsetText=“周六”休息;
}
System.out.println(offset+“从”+todayText+“开始的天数”是“+offset文本”);
}
}

我的最后一个问题是,我将如何使用枚举实现这一点?有什么想法吗

您应该使用
%7
而不是
%6
,因为从0到6(包括0到6)的计数是7。

请尝试此代码片段,也许这将帮助您:

public class Days
{

    enum DAY
    {
        MON("Monday"),
        TUE("Tuesday"),
        WED("Wednesday"),
        THU("Thursday"),
        FRI("Friday"),
        SAT("Saturday"),
        SUN("Sunday");

        private String name;

        private DAY(String name)
        {
            this.name= name;
        }

        @Override
        public String toString()
        {
            return this.name;
        }

        public DAY add(int days)
        {
            int posMod = (this.ordinal() + days) % values().length;
            if (posMod < 0)
            {
                posMod += values().length;
            }
            return DAY.values()[posMod];
        }
    }

    public static void main(String[] args)
    {
        DAY a = DAY.values()[0];
        System.out.println(a);
        System.out.println(a.add(-2));
        System.out.println(a.add(0));
        System.out.println(a.add(-8));
    }

}
公共课日
{
枚举日
{
星期一(星期一),
星期二(星期二),
星期三(星期三),
星期四(星期四),
星期五(星期五),
星期六(星期六),
太阳报(“星期日”);
私有字符串名称;
私人日(字符串名称)
{
this.name=name;
}
@凌驾
公共字符串toString()
{
返回此.name;
}
公众日新增(整数天)
{
int posMod=(this.ordinal()+days)%values().length;
if(posMod<0)
{
posMod+=值().长度;
}
返回日期.values()[posMod];
}
}
公共静态void main(字符串[]args)
{
a天=天。值()[0];
系统输出打印项次(a);
系统输出打印项次(a.add(-2));
系统输出println(a.add(0));
系统输出打印项次(a.add(-8));
}
}

为什么要使用%6而不是%7?哎呀,刚想到这个,就忘了包含0。谢谢您可以在这里看到如何使用枚举:但它不会在当前代码中产生太大的差异。一个小建议是将switch语句放在一个返回字符串的方法中,因为它与刚才用于设置不同变量的代码完全相同。谢谢,我将实现它。您对负值的偏移量有什么建议吗?删除负值的“特殊代码”(如果删除)just offsetDay=(今天+偏移量)%6;/code>星期一,
星期二
等等,你为什么不给你的枚举命名呢?@OldCurmudgeon它跟在Java常量后面。@OldCurmudgeon就像MichaelT说的那样。你可以把周一改成周一等等……我根据你的需要添加了天数计算。