【发布时间】:2016-03-21 04:49:20
【问题描述】:
我是一个自学 Java 的初学者。我刚刚学会了如何从方法中返回值。我尝试了这个练习,可以在这里找到 Weekday Calculator。
我的工作代码花了我一段时间来编写。 (#proudNOOB)
import java.util.Scanner;
public class WeekdayCalculator {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int yearsSince1900, total, remainder;
System.out.print("Enter your year of birth ~ ");
int year = keyboard.nextInt();
System.out.print("Enter the month you were born in " + year + " ~ ");
int month = keyboard.nextInt();
System.out.print("Enter the day you were born in " + monthName(month) + " ~ ");
int day = keyboard.nextInt();
yearsSince1900 = year - 1900;
// System.out.println(yy);
total = (yearsSince1900 / 4) + yearsSince1900 + day + monthOffset(month);
if ((isLeap(year) == true) && month == 1 || month == 2) {
total = total - 1;
}
// System.out.println(total);
remainder = total % 7;
// System.out.println(remainder);
// Display (day of week, month, day, year)
System.out.println("\nYou were born on " + weekdayName(remainder) + ", " + monthName(month) + " " + day + ", " + year + ".");
}
public static int monthOffset(int month) {
int offset;
if (month == 1) {
offset = 1;
}
else if (month == 2) {
offset = 4;
}
else if (month == 3) {
offset = 4;
}
else if (month == 4) {
offset = 0;
}
else if (month == 5) {
offset = 2;
}
else if (month == 6) {
offset = 5;
}
else if (month == 7) {
offset = 0;
}
else if (month == 8) {
offset = 3;
}
else if (month == 9) {
offset = 6;
}
else if (month == 10) {
offset = 1;
}
else if (month == 11) {
offset = 4;
}
else if (month == 12) {
offset = 6;
}
else {
offset = -1;
}
return offset;
}
public static boolean isLeap(int year) {
boolean leap;
if (year % 400 == 0) {
leap = true;
}
else if (year % 100 == 0) {
leap = false;
}
else if (year % 4 == 0) {
leap = true;
}
else {
leap = false;
}
return leap;
}
public static String weekdayName(int remainder) {
String weekdayWord = "";
if (remainder == 1) {
weekdayWord = "Sunday";
}
else if (remainder == 2) {
weekdayWord = "Monday";
}
else if (remainder == 3) {
weekdayWord = "Tuesday";
}
else if (remainder == 4) {
weekdayWord = "Wednesday";
}
else if (remainder == 5) {
weekdayWord = "Thursday";
}
else if (remainder == 6) {
weekdayWord = "Friday";
}
else if (remainder == 7) {
weekdayWord = "Saturday";
}
return weekdayWord;
}
public static String monthName(int month) {
String monthWord = "";
if (month == 1) {
monthWord = "January";
}
else if (month == 2) {
monthWord = "February";
}
else if (month == 3) {
monthWord = "March";
}
else if (month == 4) {
monthWord = "April";
}
else if (month == 5) {
monthWord = "May";
}
else if (month == 6) {
monthWord = "June";
}
else if (month == 7) {
monthWord = "July";
}
else if (month == 8) {
monthWord = "August";
}
else if (month == 9) {
monthWord = "September";
}
else if (month == 10) {
monthWord = "October";
}
else if (month == 11) {
monthWord = "November";
}
else if (month == 12) {
monthWord = "December";
}
else {
monthWord = "error";
}
return monthWord;
}
}
我使用练习说明中的自动测试来测试我的程序。该程序适用于所有这些测试,除了 2 13 1977 给我的输出“你出生于 1977 年 2 月 13 日”,它也适用于我的生日,以及其他随机日期。但是,我尝试了我父亲的生日(只是为了它的见鬼)并且输出有问题,就像测试用例一样(缺少工作日名称)。
输入:
输入您的出生年份 ~ 1962
输入您出生于 1962 ~ 12 年的月份
输入您在 12 月 ~ 29 日出生的日期
输出:
您出生于 1962 年 12 月 29 日。
我知道根据我的输入和程序的逻辑,yearsSince1900 变量的值为 62。然后总变量保持 ((62 / 4) + 62 + 29 + 6) 等于 112。然后 112 % 7等于 16,意味着余数等于 0。因此,weekdayName 方法不返回 weekdayWord,因为没有余数 == 0 的条件。修复这个弄乱某些生日的逻辑错误的最佳方法是什么。我希望这个程序也适用于我父亲的生日(以及 1900 年以后的任何生日),以便我可以向他展示它。 :D 此外,任何关于自学编程的技巧以及在哪里可以找到像这样的简单游戏或练习都将受到高度赞赏。谢谢!
【问题讨论】:
-
如果您需要更多信息,请告诉我。
-
你也可以用
return new SimpleDateFormat("EEEE, MMMM d, yyyy").format(new Date(yyyy - 1900, mm, dd));实现weekday