Java'yı kendi başıma uygulayan yeni bir girişimciyim. Değerleri yöntemlerden nasıl döndüreceğimi yeni öğrendim. Burada Weekday Calculator bulunabilir bu egzersiz denemeliyim.Hafta içi Hesaplama Mantıksal Hata - Java
Yazmak için biraz zaman alan çalışma kodum var. (#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;
}
}
Programımı, egzersiz talimatlarında bulunan otomatik testlerle test ettim. Program, bana "13 Şubat 1977'de doğdun" diye çıkarılan ve diğer rastgele tarihler arasında doğum tarihime karşı çalışan 2 13 1977 hariç tüm bu testlere karşı çalışıyor. Ancak, babamın doğum tarihini denedim (sadece hakettiği için) ve test durumu için olduğu gibi çıktı (hafta içi adı eksik).
GİRİŞİ:
~ 29
ÇIKIŞ Eğer Aralık ayında doğduğun gün girin ~ 12
1962 doğumlu ay ~ 1962
girin Doğum yılı girin :
29 Aralık 1962'de doğmuşsunuz.
Benim girişime ve programın mantığına göre, yearsSince1900 değişkeninin 62 değerine sahip olduğunu anlıyorum. Ardından toplam değişken 112'ye eşit olan ((62/4) + 62 + 29 + 6). Sonra% 112 7 eşittir 16 Bu, kalanının 0'a eşit olduğu anlamına gelir. Bu nedenle, weekdayName yöntemi hafta içiWord döndürmez, çünkü geriye kalan == 0 olan bir koşul yoktur. Belirli mantıksal sorunları çözen bu mantıksal hatayı düzeltmenin en iyi yolu nedir. Bu programın babamın doğum tarihi için (ve 1900'de devam eden herhangi bir doğum tarihi için) çalışmasını istiyorum, böylece ona gösterebilirim. : D Ayrıca, kendi kendine öğrenme programlaması ve basit oyunlar ya da bunun gibi alıştırmalar için herhangi bir ipucu çok takdir edilecektir. Teşekkürler!
Ek bilgiye ihtiyacınız varsa, lütfen bana bildirin. – camelCoder
Ayrıca 'weekday 'ile yeni SimpleDateFormat (" EEEE, MMMM d, yyyy ") biçimini de kullanabilirsiniz. (Yeni Tarih (yyyy - 1900, mm, dd)); –