【问题标题】:Java string errorJava 字符串错误
【发布时间】:2013-12-01 11:46:50
【问题描述】:

我正在尝试解决以下问题,但是在输入值后它不会计算。我希望这可以很快得到纠正,并且没有弄错 if-else 语句?谢谢!

编写一个名为 season 的方法,该方法接受两个整数作为参数,分别代表一个月数和一个天数,并返回一个表示该月和日的季节的字符串。假设月份指定为 1 到 12 之间的整数(1 表示一月,2 表示二月,依此类推),并且该月的日期是 1 到 31 之间的数字。 如果日期介于 12/16 和 3/15 之间,则应返回“Winter”。如果日期介于 3/16 和 6/15 之间,则应返回“Spring”。如果日期介于 6/16 和 9/15 之间,则应返回“Summer”。如果日期介于 9/16 和 12/15 之间,则应返回“Fall”。”

import java.util.Scanner;

public class Seasons
{
  public static void main(String[] args)
{
 Scanner keyboard = new Scanner(System.in);
 System.out.println("This program reports the season for a given day and month");
 System.out.print("Please enter the month and day as integers with a space between the month and day:");
 int month = keyboard.nextInt();
 int day = keyboard.nextInt();
 }

public static String season(int month, int day)

{

if ((month == 12 && day >= 16) || (month == 3 || day <= 15) || (month == 1 || month == 2))
return "Winter";

if ((month == 3 && day >= 16) || (month == 6 || day <= 15) || (month == 4 || month == 5))
return "Spring";

if ((month == 6 && day >= 16) || (month == 9 || day <= 15) || (month == 7 || month == 8))
return "Summer";

if ((month == 9 && day >= 16) || (month == 12 || day <= 15) || (month == 10 || month == 11))
return "Fall";

else
  {
     return "impossible!";
  }
}
}

【问题讨论】:

  • 你永远不会调用你的 season 方法。从用户那里获得值后,在 main 中添加行 String result = season(month, day);,并在控制台中打印此结果。另外你应该修改你的条件,如果month = 50day = 2,它将输出冬天。

标签: java string if-statement


【解决方案1】:

你还没有调用方法season

添加行:

System.out.println(Seasons.season(month, day));

main 方法的末尾。这将调用该方法并打印其返回值。

您甚至可以改进您的解决方案: 您是否已经考虑过输入验证?如果用户输入Monday怎么办?还是数字太大?

【讨论】:

    【解决方案2】:

    你没有在任何地方调用 season 方法。因为 season 是一个静态方法,所以你不需要创建一个对象。调用这种格式的方法 classname.staticmethod()

    import java.util.Scanner;
    
    public class Seasons
    {
      public static void main(String[] args)
    {
     Scanner keyboard = new Scanner(System.in);
     System.out.println("This program reports the season for a given day and month");
     System.out.print("Please enter the month and day as integers with a space between the month and day:");
     int month = keyboard.nextInt();
     int day = keyboard.nextInt();
    String result=Seasons.season(month,day)
    System.out.println(result);
     }
    
    public static String season(int month, int day)
    
    {
    
    if ((month == 12 && day >= 16) || (month == 3 || day <= 15) || (month == 1 || month == 2))
    return "Winter";
    
    if ((month == 3 && day >= 16) || (month == 6 || day <= 15) || (month == 4 || month == 5))
    return "Spring";
    
    if ((month == 6 && day >= 16) || (month == 9 || day <= 15) || (month == 7 || month == 8))
    return "Summer";
    
    if ((month == 9 && day >= 16) || (month == 12 || day <= 15) || (month == 10 || month == 11))
    return "Fall";
    
    else
      {
         return "impossible!";
      }
    }
    }
    

    【讨论】:

      【解决方案3】:
      import java.util.Calendar;
      import java.util.GregorianCalendar;
      
      ...
      
          public static String season(int month, int day){
              Calendar today = new GregorianCalendar();
              int year = today.get(Calendar.YEAR);
              if(inBetween(year, 3, 16, year, 6, 15, year, month, day))
                  return "Spring";
              else if(inBetween(year, 6, 16, year, 9, 15, year, month, day))
                  return "Summer";
              else if(inBetween(year, 9, 16, year, 12, 15, year, month, day))
                  return "Fall";
              else if(inBetween(year, 12, 16, year,  12, 31, year,   month, day)||
                      inBetween(year+1,1,  1, year+1, 3, 15, year+1, month, day))
                  return "Winter";
              return "impossible";
          }
          public static boolean inBetween(int startY, int startM, int startD,
                                          int endY,   int endM,   int endD,
                                          int year,   int month,  int day){
                  Calendar startDay = new GregorianCalendar();
                  startDay.clear();
                  startDay.set(startY, startM-1, startD);
                  Calendar endDay = new GregorianCalendar();
                  endDay.clear();
                  endDay.set(endY, endM-1, endD);
                  Calendar checkDay = new GregorianCalendar();
                  checkDay.clear();
                  checkDay.set(year, month-1, day);
                  //startDay <= checkDay && checkDay <= endDay
                  return startDay.compareTo(checkDay)<=0 && checkDay.compareTo(endDay)<=0;
          }
      

      【讨论】:

      • 如果不允许 4 50,则需要进一步检查日期。
      • -1 因为它是过度设计的,而且仅仅提供大量没有任何描述的代码不会帮助任何人学习。
      • @NickJ 这只是一个使用 GregorianCalendar 和 Calendar 的简单示例。哈哈。
      猜你喜欢
      • 1970-01-01
      • 2014-10-23
      • 2013-12-17
      • 2012-02-22
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多