Java 返回值并将其用作参数

Java 返回值并将其用作参数,java,Java,所以,我正在开发的程序是一个询问用户今天的日期并告诉他们一年中的绝对日期的程序。然后,程序向用户询问他们的生日,并使用从上一个方法获得的今天绝对日期的值,告诉用户离下一个生日还有多少天。我把第一部分记下来了,但第二部分还在挣扎。以下是我的预期输出: 请输入今天的日期: 什么是月份(1-12)?七, 今天是几号(1-31)?二十四 7/24是365年的第205天 请输入您的生日: 什么是月份(1-12)?十一, 今天是几号(1-30)?六, 11/6是365年的第310天 你的下一个生日是105天

所以,我正在开发的程序是一个询问用户今天的日期并告诉他们一年中的绝对日期的程序。然后,程序向用户询问他们的生日,并使用从上一个方法获得的今天绝对日期的值,告诉用户离下一个生日还有多少天。我把第一部分记下来了,但第二部分还在挣扎。以下是我的预期输出:

请输入今天的日期:

什么是月份(1-12)?七,

今天是几号(1-31)?二十四

7/24是365年的第205天

请输入您的生日:

什么是月份(1-12)?十一,

今天是几号(1-30)?六,

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;
      }    
  } 
} 
import java.util.*;
公课生日
{
公共静态void main(字符串[]args)
{
扫描仪控制台=新扫描仪(System.in);
导言();
绝对每日提示和应答器(控制台);
下周一提示和应答(控制台,今天解决);
}
公共静态无效介绍()
{
System.out.print(“此程序告诉您多少天\n”);
System.out.println(“它将一直持续到您的下一个生日。”);
}
公共静态int AbsoluteDayPromptAndSwer(扫描仪控制台)
{
System.out.println();
System.out.println(“请输入今天的日期:”);
系统输出打印(“月份(1-12)是多少?”;
int currentmount=console.nextInt();
系统输出打印(“日期(1-31)?”;
int currentDay=console.nextInt();
int todayabsolutionday=findabsolutionday(currentmount,currentDay);
System.out.print(currentMonth+“/”+currentDay+“是天”+)
今天是“第365天”+;
今天返回b解决日期;
}
公共静态int findAbsoluteDay(int currentMonth,int currentDay)
{
整数天=0;
对于(int i=1;i今天)
{
返回生日-今天;
}
否则(生日<今天)
{
返回(365-今天)+生日;
}
其他的
{
返回0;
}    
} 
} 

这是我当前的代码。在我的
AbsoluteDayPromptAndSwer
方法中,我返回今天的绝对日期,并尝试使用该值作为参数,并将其放入我的
NextBirthdayPromptAndSwer
方法中,我从main方法调用该方法。然而,这不起作用,我正在努力寻找原因。我遇到找不到符号错误。任何帮助都将不胜感激

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

在主方法中有行的位置:

absoluteDayPromptAndAnswer(console);
您需要将此值指定给整数

int todayAbsoluteDay = absoluteDayPromptAndAnswer(console);
然后再次运行代码,看看会发生什么


您的
AbsoluteDayPromptAndSwer
方法正在返回一个
int
todayAbsoluteDay
。但是,您没有在main方法中将此值分配给
int
,如果不这样做,您就无法将此值传递给
nextbirthdaypromptandswer
方法。

您没有将第一个方法返回的值传递给第二个方法,只需按如下方式更改main:

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

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

<variable name> = <method call>;
如果你感到困惑,可以这样想

使用上述语法时,该方法在求值后将被其返回值“替换”:

myVar = someMethod(); // someMethod always returns 1
变成:

myVar = 1;
由于该方法在求值后被其返回值“替换”,因此您也可以将整个内容写在一行中:

nextBirthdayPromptAndAnswer(console, absoluteDayPromptAndAnswer(console)); 

但我认为这样可读性较差。

这段代码确实有效,而且比我的答案版本更简洁。然而,我认为我的答案的代码对于编写此代码所需的编程级别来说更容易理解。
nextBirthdayPromptAndAnswer(console, absoluteDayPromptAndAnswer(console));