【问题标题】:Horoscope Project (In Need of Help!)星座计划(需要帮助!)
【发布时间】:2014-10-19 21:50:09
【问题描述】:

我发现问题在于 int MATHDATE 没有像预期的那样改变。每次我输入生日时,符号都会出现摩羯座,因为 MATHDATE 不会从 0 更改。有人可以帮我解决这个问题吗?谢谢。

System.out.println("Please enter your birthday in mm/dd format: ");

   Scanner birthdayin = new Scanner(System.in);
   String bmonth = scan.nextLine();
   int bday = Integer.parseInt((bmonth.substring(0,bmonth.indexOf('/'))));
   String horoscope = null;
   int MATHDATE = 0;

   if (bmonth.equals("01") || bmonth.equals("1")){
   MATHDATE = 0 + bday;}
   if (bmonth.equals("02") || bmonth.equals("2")){
   MATHDATE = 31 + bday;}
   if (bmonth.equals("03") || bmonth.equals("3")){
   MATHDATE = 59 + bday;}
   if (bmonth.equals("04") || bmonth.equals("4")){
   MATHDATE = 90 + bday;}
   if (bmonth.equals("05") || bmonth.equals("5")){
   MATHDATE = 120 + bday;}
   if (bmonth.equals("06") || bmonth.equals("6")){
   MATHDATE = 151 + bday;}
   if (bmonth.equals("07") || bmonth.equals("7")){
   MATHDATE = (181 + bday);}
   if (bmonth.equals("08") || bmonth.equals("8")){
   MATHDATE = 212 + bday;}
   if (bmonth.equals("09") || bmonth.equals("9")){
   MATHDATE = 243 + bday;}
   if (bmonth.equals("10")){
   MATHDATE = 273 + bday;}
   if (bmonth.equals("11")){
   MATHDATE = 304 + bday;}
   if (bmonth.equals("12")){
   MATHDATE = 334 + bday;}

   if (MATHDATE >= 20 && MATHDATE <= 49)
   {horoscope = ("AQUARIUS");}
   else if (MATHDATE >= 50 && MATHDATE <= 79)
   {horoscope = ("PISCES");}
   else if (MATHDATE >=80 && MATHDATE <=110)
   {horoscope = ("ARIES");}
   else if (MATHDATE >= 111 && MATHDATE <= 141)
   {horoscope = ("TAURUS");}
   else if (MATHDATE >= 142 && MATHDATE <= 172)
   {horoscope = ("GEMINI");}
   else if (MATHDATE >= 173 && MATHDATE <= 203)
   {horoscope = ("CANCER");}
   else if (MATHDATE >= 204 && MATHDATE <= 234)
   {horoscope = ("LEO");}
   else if (MATHDATE >= 235 && MATHDATE <= 265)
   {horoscope = ("VIRGO");}
   else if (MATHDATE >= 266 && MATHDATE <= 295)
   {horoscope = ("LIBRA");}
   else if (MATHDATE >= 296 && MATHDATE <= 325)
   {horoscope = ("SCORPIO");}
   else if (MATHDATE >= 326 && MATHDATE <= 355)
   {horoscope = ("SAGITTARIUS");}
   else if (MATHDATE >= 356 || MATHDATE<= 19)
   {horoscope = ("CAPRICORN");}


   System.out.println("Your sign is: " + horoscope);

【问题讨论】:

  • 您是否进行过任何基本调试,例如打印出bmonth 的值并确认它包含您认为包含的内容?
  • 假设bmonth 包含/ 字符,您从bmonth 派生bday。同时,您对 bmonth 进行了 12 次相等检查,假设 bmonth 包含 1 到 12 之间的格式化数字……但没有 / 字符。因此,您的代码显然对 bmonth 可能包含的内容做出了相互矛盾的假设。
  • 看起来你需要设置bmonth,就像你有bday一样(只取部分输入)。只是一个快速指针 - 即使第一个 if 条件为真,所有其他条件仍将被评估。这种语言是否支持选择案例/开关?

标签: int project


【解决方案1】:

如果有人确实以这种格式输入了他们的生日(例如,“12/15”),bmonth 将是“12/15”(不符合您的任何条件),因为您不这样做在致电scan.nextLine() 之后,可以用它来减少一天的休息时间。另外,我不知道scan 是什么,因为您将扫描仪命名为birthdayin,然后您就不用了。

最快的更改(假设您解决了 scanbirthdayin 的问题)是检查 if ((bmonth.startsWith("01/") || bmonth.startsWith("1/")) 之类的内容。

【讨论】:

    【解决方案2】:

    你为什么不分开日期并做这样的事情:

               Scanner birthdayin = new Scanner(System.in);
               String bmonth = birthdayin.nextLine();
               String[] parts = bmonth.split("/");
               String horoscope = null;
    
               int M = Integer.parseInt(parts[0]);
                int D = Integer.parseInt(parts[1]);
                if      ((M == 12 && D >= 22 && D <= 31) || (M ==  1 && D >= 1 && D <= 19))
                    horoscope ="Capricorn";
                else if ((M ==  1 && D >= 20 && D <= 31) || (M ==  2 && D >= 1 && D <= 17))
                    horoscope ="Aquarius";
                else if ((M ==  2 && D >= 18 && D <= 29) || (M ==  3 && D >= 1 && D <= 19))
                    horoscope ="Pisces";
                else if ((M ==  3 && D >= 20 && D <= 31) || (M ==  4 && D >= 1 && D <= 19))
                    horoscope ="Aries";
                else if ((M ==  4 && D >= 20 && D <= 30) || (M ==  5 && D >= 1 && D <= 20))
                    horoscope ="Taurus";
                else if ((M ==  5 && D >= 21 && D <= 31) || (M ==  6 && D >= 1 && D <= 20))
                    horoscope ="Gemini";
                else if ((M ==  6 && D >= 21 && D <= 30) || (M ==  7 && D >= 1 && D <= 22))
                    horoscope ="Cancer";
                else if ((M ==  7 && D >= 23 && D <= 31) || (M ==  8 && D >= 1 && D <= 22))
                    horoscope ="Leo";
                else if ((M ==  8 && D >= 23 && D <= 31) || (M ==  9 && D >= 1 && D <= 22))
                    horoscope ="Virgo";
                else if ((M ==  9 && D >= 23 && D <= 30) || (M == 10 && D >= 1 && D <= 22))
                    horoscope ="Libra";
                else if ((M == 10 && D >= 23 && D <= 31) || (M == 11 && D >= 1 && D <= 21))
                    horoscope ="Scorpio";
                else if ((M == 11 && D >= 22 && D <= 30) || (M == 12 && D >= 1 && D <= 21))
                    horoscope ="Sagittarius";
                else
                    horoscope ="Illegal date";
    
                System.out.println("Your sign is: " + horoscope);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多