返回值并将其用作参数

时间:2016-11-13 22:12:52

标签: java

因此,我正在处理的程序是向用户询问今天的日期,并告诉他们一年中的绝对日期。该程序然后询问用户他们的生日日期,并使用从前一方法获得的今天的绝对日期的值,告诉用户他们下一个生日的天数。我有第一部分,但我正在努力与第二部分。这是我的预期输出:

请输入今天的日期:

月份是什么(1-12)? 7

今天是什么日子(1-31)? 24

7/24是365天的第205天。

请输入你的生日:

月份是什么(1-12)? 11

今天是什么日子(1-30)? 6

11/6是365的第310天。

你的下一个生日是105天。

import java.util.*;

public class Birthday
{
   public static void main(String[] args)
   {
   Scanner console = new Scanner(System.in);
   introduction();
   absoluteDayPromptAndAnswer(console);
   nextBirthdayPromptAndAnswer(console, todayAbsoluteDay); 
   }

   public static void introduction()
   {
      System.out.print("This program tells you how manys days\n");
      System.out.println("it will be until your next birthday.");
   }

   public static int absoluteDayPromptAndAnswer(Scanner console)
   {
      System.out.println();
      System.out.println("Please enter today's date:");



      System.out.print("What is the month (1-12)? ");     
      int currentMonth = console.nextInt();

      System.out.print("What is the day   (1-31)? ");
      int currentDay = console.nextInt();

      int todayAbsoluteDay = findAbsoluteDay(currentMonth, currentDay);

      System.out.print(currentMonth + "/" + currentDay + " is day #" + 
      todayAbsoluteDay + " of 365");

      return todayAbsoluteDay;     
   }

   public static int findAbsoluteDay(int currentMonth, int currentDay)
   {
       int days = 0;
           for (int i = 1; i < currentMonth; i++)
           {
               days += daysInMonth(i);  
           }
           days += currentDay;
    return days;
   }

   public static int daysInMonth(int month)
   {
       if (month == 2)
       {
           return 28;
       }
       else if (month == 4 || month == 6 || month == 9 || month == 11)
       {
           return 30;
       }
       else
       {
           return 31;
       }
   }

   public static void nextBirthdayPromptAndAnswer(Scanner console, int todayAbsoluteDay)
   {
   System.out.println();
   System.out.println("Please enter your birthday:");

  System.out.print("What is the month (1-12)? ");
  int birthdayMonth = console.nextInt();

  System.out.print("What is the day   (1-31)? ");
  int birthdayDay = console.nextInt();

  int birthdayAbsoluteDay = findAbsoluteDay(birthdayMonth, birthdayDay);

  System.out.print("your next birthday is in " + 
  compare(birthdayAbsoluteDay, todayAbsoluteDay) + " days.");
  }

  public static int compare(int birthday, int today)
  {
      if (birthday > today)
      {
          return birthday - today;
      }
      else if (birthday < today)
      {
          return (365 - today) + birthday;
      }
      else
      {
          return 0;
      }    
  } 
} 

这是我目前的代码。在我的absoluteDayPromptAndAnswer方法中,我今天绝对返回,并尝试将该值用作参数并将其放在我的nextBirthdayPromptAndAnswer方法中,我从main方法调用它。但是,这不起作用,我很难找到原因。我找不到符号错误。任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

以下是解决问题的一种方法:

主方法中有一行:

absoluteDayPromptAndAnswer(console);

您需要将此值分配给整数。

int todayAbsoluteDay = absoluteDayPromptAndAnswer(console);

然后再次运行代码,看看会发生什么。

您的absoluteDayPromptAndAnswer方法返回int todayAbsoluteDay。但是,您没有将此分配给主方法中的int,并且如果不执行此操作,则无法将此值传递给nextBirthdayPromptAndAnswer方法。

答案 1 :(得分:1)

您没有将第一种方法返回的值传递给第二种方法,只需改变您的主要方式:

public static void main(String[] args)
{
    Scanner console = new Scanner(System.in);
    introduction();
    nextBirthdayPromptAndAnswer(console, absoluteDayPromptAndAnswer(console)); 
}

答案 2 :(得分:0)

您可能知道或者可能不知道,如果方法返回一个值,您可以使用以下语法将返回值存储在变量中:

<variable name> = <method call>;

所以你的代码应该是:

int todayAbsoluteDay = absoluteDayPromptAndAnswer(console);
nextBirthdayPromptAndAnswer(console, todayAbsoluteDay);

如果你感到困惑,可以这样想,

当您使用上述语法时,该方法在评估后被其返回值“替换”:

myVar = someMethod(); // someMethod always returns 1

变成:

myVar = 1;

由于该方法在评估后被其返回值“替换”,您还可以将整个内容写在一行中:

nextBirthdayPromptAndAnswer(console, absoluteDayPromptAndAnswer(console)); 

但我认为这种方式不太可读。