2014-09-25 83 views
0

我運行該程序,它工作正常,我不知道我做了什麼,但這是我在對話框中得到的。它應該說4月5日不錯5程序工作正常,但現在我無法發現錯誤

Please enter a year to calculate Easter Sunday 
>2015 
error5 

任何人都可以發現錯誤來自哪裏?另外一個問題是我需要所有的案例1-12和所有的月份?或者我可以只用四月來得到,因爲它是唯一一個用來計算復活節星期日的月份。

import java.util.Scanner; 

public class Easter 
{ 
    public static void main(String[] args) 
    { 
     System.out.print("Please enter a year to calculate Easter Sunday\n>"); 
     Scanner s = new Scanner(System.in); 
     int inputted = getResult(s); 
     while(inputted <= 0) 
     { 
      System.out.print("Expected a positive year. Please try again:\n>"); 
      inputted = getResult(s); 
     } 
     System.out.println(getEasterSundayDate(inputted)); 
    } 

    private static int getResult(Scanner s) 
    { 
     while(!s.hasNextInt()) 
     { 
      System.out.print("Expected a valid year. Please try again:\n>"); 
      s.nextLine(); 
     } 
     return s.nextInt(); 
    } 

    public static String getEasterSundayDate(int year) 
    { 
     int a = year % 19, 
      b = year/100, 
      c = year % 100, 
      d = b/4, 
      e = b % 4, 
      g = (8 * b + 13)/25, 
      h = (19 * a + b - d - g + 15) % 30, 
      j = c/4, 
      k = c % 4, 
      m = (a + 11 * h)/319, 
      r = (2 * e + 2 * j - k - h + m + 32) % 7, 
      n = (h - m + r + 90)/25, 
      p = (h - m + r + n + 19) % 32; 

     String result; 
     switch(n) 
     { 
     case 1: 
       result = "April "; 
       break; 

      default: 
       result = "error"; 
     } 

     return result + p; 
    } 
} 
+0

做過任何基本的調試,比如當你觸發'default'時拋出'n'的值? – 2014-09-25 15:38:18

+0

我手邊沒有Java編譯器,但是定義那些字母變量的所有行似乎都很奇怪。是否保證他們會被初始化,以便他們的價值如預期? – 2014-09-25 15:40:16

+0

您的變量名稱需要比現在更具描述性。 'n'現在可能有上下文,但上午9點怎麼樣?它也有助於在你的'default'語句中打印出該變量來查看它的值。 – Makoto 2014-09-25 15:43:00

回答

2

這是一個簡單的錯字。

你的switch語句是這樣的:

switch(n) 
{ 
    case 1: 
     result = "April "; 
     break; 

    default: 
     result = "error"; 
} 

記住,月數爲n,所以如果n爲4,那麼這意味着找到的月份爲4月。然而,在此代碼,你被case 1:治療四月情況下n是,不是4這樣,當你的程序是計算n爲4,它不是蓋的,並因此引起error代替的April出現在輸出中。變化的是switch語句這一點:我使用case 4:代替case 1:正確找到四月情況

switch(n) 
{ 
    case 4: 
     result = "April "; 
     break; 

    default: 
     result = "error"; 
} 

現在,另行通知。

但是,如果你只是使用一個案例是這樣,最好是隻使用一個if語句比switch

if(n == 4) 
    result = "April "; 
else 
    result = "error"; 

在另一方面,當你檢查了很多像以前一樣的情況下,你應該使用switch

但是,我仍然認爲你仍然應該考慮其他月份的情況,因爲它沒有在other question的原始作業問題中表明覆活節週日總是在四月份。

+0

你真的不可思議,我得到這麼慌亂這東西,但你能解釋它的方式我其實明白你是什麼談論。非常感謝你的幫助! – 2014-09-25 16:25:35

+0

@DevinWesolowski查看新的編輯。 – gparyani 2014-09-25 18:37:38

相關問題