本帖最后由 耿鑫 于 2012-6-20 14:52 编辑
其实楼主的代码有许多需要该的地方,虽然功能完成了,但是效果不怎么好,首先就不支持连续的输入校验,运行一次输入一次,用户很麻烦,这是其一,其二就是你代码啰嗦需要改动的地方。
class DaysDemo_2
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
//定义数组,用于存储1-12月各月的天数
int[] arr={31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
Scanner sc=new Scanner(System.in);
do
{
System.out.println("请输入年月日,并以空格分开:");
year=sc.nextInt();
month=sc.nextInt();
day=sc.nextInt();
//判断输入是否合法
if(year>0&&(month>0&&month<13)&&(day>0&&day<32&&day<arr[month-1]+1))//因为arr[month - 1] + 1 永远不可能大于32,和你前面的判断重复了。
{
//使用三元运算符判断是闰年还是平年,闰年就把2月对应的数组中的元素改为29,否则就是28天
arr[1]=(year%4==0||year%400==0)?29:28;//year%4==0和 year%400==0效果一样,
{ // 这个代码块完全没必要
int days=0;
for (int x=0;x<month-1 ;x++ )
{
//输入的月份之前所有月份的天数之和
days+=arr[x];
}
System.out.println(month+"月"+day+"日是"+year+"年的第:"+(days+day)+"天");
}
break;
}
else
System.out.println("输入错误,重新输入");
}
while (true);
}
}
下面附上我修改后的代码:
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int year, month, day;
Scanner sc = new Scanner(System.in);
System.out.println("请输入年月日,并以空格分开:");
while(true)
{
year = sc.nextInt();
month = sc.nextInt();
day = sc.nextInt();
if (year > 0 && (month > 0 && month < 13) && (day > 0 && day < 32))
{
arr[1] = (year % 4 == 0) ? 29 : 28;
int days = 0;
for (int x = 0; x < month - 1; x++)
{
days += arr[x];
}
System.out.println(month + "月" + day + "日是" + year + "年的第:" + (days + day) + "天");
}
else
{
System.out.println("输入错误,重新输入");
}
}
}
} |