gpt4 book ai didi

java - 公历 : Getting a user's (day_of_the_week) from their own birthday input

转载 作者:行者123 更新时间:2023-11-30 06:42:57 26 4
gpt4 key购买 nike

我是一个非常业余的编码员,他似乎无法解决从用户输入的整数中获取星期几(例如星期日、星期一等)的问题。我只是想给用户一条消息,其中列出了 (mm/dd/yyyy, dayOfWeek),但我没有改变星期几,而是不断得到星期三作为星期几的答案,无论我在里面放什么提示框。我只是需要一个新的方向。我的代码或我没有看到的途径有任何错误吗?任何帮助将不胜感激。

public static void main(String [] args)
{
Scanner user_input = new Scanner (System.in);

String returnValue = "";
int month2=0;
int day2=0;
int year2=0;
GregorianCalendar userbirthday = new GregorianCalendar(year2, month2, day2);
int userweekday=userbirthday.get(Calendar.DAY_OF_WEEK);




String usermonth;
System.out.print ("What month is your birthday?");
usermonth = user_input.next();

String userday;
System.out.print ("What day is your birthday?");
userday = user_input.next();

String useryear;
System.out.print ("What year was your birth?");
useryear = user_input.next();

year2 = Integer.parseInt(useryear);
month2 = Integer.parseInt(usermonth);
day2 = Integer.parseInt(userday);


String dayOfTheWeek = "";

if(month2 == 0){
System.out.println("That's not a valid birthday! Check your month.");
System.exit(0);
} else if (month2>=13){
System.out.println("That's not a valid birthday! Check your month.");
System.exit(0);
}
if(day2 == 0){
System.out.println("That's not a valid birthday! Check your day.");
System.exit(0);
} else if (day2>=32){
System.out.println("That's not a valid birthday! Check your day.");
System.exit(0);
}
if(userweekday == 2){
dayOfTheWeek= "Mon";
} else if (userweekday==3){
dayOfTheWeek = "Tue";
} else if (userweekday==4){
dayOfTheWeek = "Wed";
} else if (userweekday==5){
dayOfTheWeek = "Thu";
} else if (userweekday==6){
dayOfTheWeek = "Fri";
} else if (userweekday==7){
dayOfTheWeek = "Sat";
} else if (userweekday==1){
dayOfTheWeek = "Sun";
}

String birthdate = month2 + "/" + day2 + "/" + year2 + "," + dayOfTheWeek;



System.out.println ("Your birthday was" + " " + birthdate);

}

最佳答案

你做事的顺序错了。正如您在问题中的代码所代表的那样,发生了以下情况:

  1. 您正在将 month2day2year2 初始化为 0。
  2. 你正在从那些值为 0 的变量创建你的 GregorianCalendar 对象。这给你星期三,12 月 31 日公元前 2 年(没有 0 年,所以你设置为 1 月 0 日公元前 1 年,等于公元前 2 年的 12 月 31 日——令人困惑,但对于 GregorianCalendar 来说,这是事实)。然后,您将星期几放入 userweekday(始终等于 Calendar.WEDNESDAY)。
  3. 最后,在 year2 = Integer.parseInt(useryear); 等行中,您将用户输入分配给变量。这不会影响您已经创建的 GregorianCalendar 对象,也不会影响已经从该 GregorianCalendar 获得的星期几。

因此将始终打印星期三。

顺便说一句,GregorianCalendar 类早已过时并且存在设计问题。在其他问题中,它通常需要冗长的代码,这也很容易出错。它以意想不到的方式计算月份。相反,我建议您使用现代 Java 日期和时间 API java.time 中的 LocalDate

LocalDate              // Represent a date-only value, without time-of-day, without time zone. 
.of( y , m , d ) // Specify year-month-day, 1-12 for January-December.
.getDayOfWeek() // Extract a `DayOfWeek` enum object representing one of seven days of the week.
.getDisplayName( // Automatically localize the text of the name of the day of the week.
TextStyle.SHORT , // Specify how long or abbreviated.
Locale.US // Locale determines the human language and cultural norms used in localizing.
)

链接: Oracle tutorial: Date Time解释如何使用 java.time

关于java - 公历 : Getting a user's (day_of_the_week) from their own birthday input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52661046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com