因此,我正在处理的程序是向用户询问今天的日期,并告诉他们一年中的绝对日期。该程序然后询问用户他们的生日日期,并使用从前一方法获得的今天的绝对日期的值,告诉用户他们下一个生日的天数。我有第一部分,但我正在努力与第二部分。这是我的预期输出:
请输入今天的日期:
月份是什么(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方法调用它。但是,这不起作用,我很难找到原因。我找不到符号错误。任何帮助将不胜感激
答案 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));
但我认为这种方式不太可读。