【发布时间】:2015-03-28 12:42:26
【问题描述】:
我有一个程序可以检查用户日期输入并显示下一个日期的输出。但是,我在程序中使用了多个 if-else 语句。
我想修改它,让它使用方法来进行计算,而不是重复的代码。
下面是我的代码示例,以三月和四月为例,一个是30天,一个是31天:
public class calDate{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean dateValid = false;
int day = 0;
int month = 0;
int year = 0;
int nextDay = 0
int nextYear = 0;
String nextMonth = "";
boolean run=true;
char again='Y';
while(run)
{
System.out.print("Day: ");
day = scan.nextInt();
System.out.print("Month: ");
month = scan.nextInt();
System.out.print("Year: ");
year = scan.nextInt();
while (month < 1 && month > 12) //check if month is within 1 to 12
{
dateValid = false;
}
if ((month == 3) && (day >= 1 && day <= 31))
{
dateValid = true;
nextDay = day + 1;
nextMonth = " March ";
nextYear = year;
if (day == 31) {
nextDay = 1;
nextMonth = " April ";
nextYear = year;
}
}
else if ((month == 4) && (day >= 1 && day <= 30))
{
dateValid = true;
nextDay = day + 1;
nextMonth = " April ";
nextYear = year;
if (day == 30)
{
nextDay = 1;
nextMonth = " May ";
nextYear = year;
}
}
if (dateValid){
System.out.println("Tomorrow's date: " + nextDay + nextMonth + nextYear);
System.out.print("Continue?(Y/N) ");
again = scan.next().charAt(0);
if (again=='Y')
{
run=true;
System.out.println("");
}
if (again=='N')
{
run=false;
}
if ((again != 'N')&&(again!='Y'))
{
System.out.println("Invalid input. Ending program.");
run=false;
}
}
else{
System.out.println("Invalid input. Continue?(Y/N) ");
again = scan.next().charAt(0);
if (again=='Y')
{
run=true;
System.out.println("");
}
if (again=='N')
{
run=false;
}
if ((again != 'N')&&(again!='Y'))
{
System.out.println("Invalid input. Ending program.");
run=false;
}
}
}
有很多重复值,如dateValid、nextDay、nextMonth、nextYear。如何格式化我的代码,以便我可以将语句放入单独的方法中?谢谢。
【问题讨论】:
-
您的
while逻辑似乎不正确。如果您输入的月份不在 1 到 12 的范围内,您将永远无法脱离循环。这可能不是你想要的。 -
嗨@Arjan,我做了一些更改,如果他/她希望继续,如果检测到无效输入,我的程序将提示用户输入
-
但您仍然有
while (month < 1 && month > 12)行。您可能希望在此处使用if语句。
标签: java if-statement methods