2014-09-25 50 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

相关问题