2016-03-21 21 views
1

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!

+0

Ek bilgiye ihtiyacınız varsa, lütfen bana bildirin. – camelCoder

+1

Ayrıca 'weekday 'ile yeni SimpleDateFormat (" EEEE, MMMM d, yyyy ") biçimini de kullanabilirsiniz. (Yeni Tarih (yyyy - 1900, mm, dd)); –

cevap

1

görünüyor yönteminiz benim mantıksal hata ayıklama bana rehberlik her kişiye 0.

else if (remainder == 0) { 
    weekdayWord = "Saturday"; 
} 
+1

" Kalan == 0 "ifadesinin kullanılması Buradaki ifadeden bu yana "kalan = toplam% 7" 0 ile 6 arasında bir sayıya kadar değerlendirmelidir. – apicellaj

+0

Bekle ... şimdi doğum tarihimi giriyorum (yıl = 1995, ay = 2, gün = 4) ve çıktı bir gün kapalı ... Cumartesi günü olmalı ama Cuma günü gösteriyor. – camelCoder

+1

@camelCoder Ne apicellaj söyledi mantıklı. Yeniden işleyişe ihtiyaç duyduğun mantıkla ilgili bir şeyler olduğunu düşünüyorum. –

0

teşekkür bir modülü dikkate almadılar çünkü bu hata sıfıra Cumartesi kalan değiştirerek düzeltilebilir gibi hatalar. Geri kalan 0 eşittir ve kalan 7 eşitse, weekdayWord "Cumartesi" İkinci

else if (remainder == 7 || remainder == 0) { 
     weekdayWord = "Saturday"; 
    } 

, artık yıl denetimi için benim durumum, toplam etkileyecek hangi ayarlanmalıdır tüm

Birincisi, Ve sonuçta hafta içiWord, eksik parantezlerin bir sonucu olarak kusurluydu. Doğru durumdur:

if ((isLeap(year) == true) && (month == 1 || month == 2)) { 
     total = total - 1; 
    } 

programı artık başarıyla ben denedim tüm durumlar için çalışır. Bunu babama gösterme zamanı. : P

İlgili konular