黑马程序员技术交流社区
标题:
刚接触java ,知道这个日历有问题,却找不到根源,求大神...
[打印本页]
作者:
nuoxi0318
时间:
2013-7-24 21:55
标题:
刚接触java ,知道这个日历有问题,却找不到根源,求大神...
本帖最后由 杨兴庭 于 2013-7-25 23:06 编辑
import java.util.*;
public class rili5{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入年份:");
int year=in.nextInt();
System.out.println("请输入月份:");
int month=in.nextInt();
int sum=0;
for(int i=1900;i<year;i++){
if(i%4==0&&i%100!=0||i%400==0){
sum+=366;
break;
}else{
sum+=365;
break;
}
}
for(int i=1;i<month;i++){
if(month==2){
if(year%4==0&&year%100!=0||year%400==0){
sum+=29;
}else{
sum+=28;
}
month++;
}
if(i==4|i==6|i==9|i==11){
sum+=30;
}else{
sum+=31;
}
}
sum+=1;
int weekday=sum%7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<=weekday;i++){
System.out.print("\t");
}
for(int i=1;i<=30;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}
}
到底神马地方错了啊?
复制代码
作者:
草貌路飞
时间:
2013-7-24 22:03
没仔细看 你刚开始应该是想用年算总的天数吧, 自加后应该不break吧sum+=366; break; }else{ sum+=365; break;
作者:
冒烟的芒果
时间:
2013-7-24 23:10
你这个代码有不少地方有问题,修改的地方有注释,经测试,能准确显示
import java.util.*;
public class Test3{
public static void main(String[] args){
int days;
Scanner in=new Scanner(System.in);
System.out.println("请输入年份:");
int year=in.nextInt();
System.out.println("请输入月份:");
int month=in.nextInt();
int sum=0;
for(int i=1900;i<year;i++){
if(i%4==0&&i%100!=0||i%400==0){
sum+=366;
//System.out.println("闰年");
//break;//这句不要
}else{
sum+=365;
//System.out.println("平年");
//break;//这句不要
}
}
for(int i=1;i<month;i++){
if(i==2){//这里应该判断i是不是等于2
if(year%4==0&&year%100!=0||year%400==0){
sum+=29;
}else{
sum+=28;
}
//month++;//这句不应该有
}
else if(i==4|i==6|i==9|i==11){//这里应该用else if
sum+=30;
}else{
sum+=31;
}
}
sum+=1;
int weekday=sum%7;
System.out.println(sum);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<=weekday;i++){
System.out.print("\t");
}
if(month == 2){//需要判断月份来决定输出多少天
if(year%4==0&&year%100!=0||year%400==0){
days = 29;
}
else{
days = 28;
}
}
else if(month==4|month==6|month==9|month==11){
days = 30;
}
else{
days = 31;
}
for(int i=1;i<=days;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}
}
复制代码
作者:
王磊
时间:
2013-7-24 23:45
import java.util.*;
public class abc{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入年份:");
int year=in.nextInt();
System.out.println("请输入月份:");
int month=in.nextInt();
int sum=0;
for(int i=1900;i<year;i++)
{
//判断闰年
if(i%4==0)
{
if(i%100==0&&i%400!=0)
{
sum+=365;
}
else
{
sum+=366;
}
}else
{
sum+=365;
}
}
//判断闰月
for(int i=1;i<month;i++)
{
if(i==2)
{
if(year%4==0)
{
if(year%100==0&&year%400!=0)
{
sum+=28;
}
else
{
sum+=29;
}
}
else
{
sum+=28;
}
}
if(i==4|i==6|i==9|i==11)
{
sum+=30;
}
else
{
sum+=31;
}
}
sum+=1;
int weekday=sum%7;
//打印格式算法
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<=weekday;i++){
System.out.print("\t");
}
int d = 0;//所属月份的天数变量
if(month==2)//判断2月
{
if(year%4==0)
{
if(year%100==0&&year%400!=0)
{
d=28;
}
else
{
d=29;
}
}
else
{
d=28;
}
}
if(month==4|month==6|month==9|month==11)//判断小月和大月
{
d=30;
}
else
d=31;
//打印时,以天数为上限进行打印
for(int i=1;i<=d;i++)
{
if(sum%7==6)
{
System.out.print(i+"\n");
}
else
{
System.out.print(i+"\t");
}
sum++;
}
}
}
复制代码
根据楼主的代码,重新做了一下,基本没什么改动。楼主代码上的问题主要出现在有一些多余代码,以及变量错误。主要问题处在最后月份天数的确定上。在整个算法上基本没什么问题。
希望有所帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2