黑马程序员技术交流社区
标题:
最初期自己写的一个小日历,突然发现有个错误,求助
[打印本页]
作者:
高亮亮
时间:
2013-11-2 15:43
标题:
最初期自己写的一个小日历,突然发现有个错误,求助
如题。突然发现输入的每个月份为1 的话,都打印不出日历表。
看了很久没搞明白为什么
import java.util.*;
public class 小日历{
public static void main(String[] args){
System.out.println("请输入年月日。");
Scanner input=new Scanner(System.in);
System.out.println("请输入年份");
int a=input.nextInt();
System.out.println("请输入月份");
int b=input.nextInt();
System.out.println("请输入日期");
int c=input.nextInt();
System.out.println("您输入的是"+a+"年"+b+"月"+c+"日");//确定用户输入了正确的年月日
int sum=0;
int year;
for(year=1990;year<a;year++){
if(year%4==0&&year%100!=0||year%400==0){
sum=sum+366;
continue;
}
sum=sum+365;
continue;
}//通过计算,将输入日期与1990年1月1日整年天数计算出
for(int mouth=1;mouth<b;mouth++){
if(mouth==2){
if(year%4==0&&year%100!=0||year%400==0){
sum=sum+29;
continue;
}
sum=sum+28;
continue;
}else if(mouth==4||mouth==6||mouth==9||mouth==11){
sum=sum+30;
continue;
}
sum=sum+31;
}//通过计算,将输入日期与1990年1月1日整年加上正月天数计算出
sum=sum+1;//通过计算,将输入日期第一个月的第一天与1990年1月1日间天数计算出
System.out.println("日\t一\t二\t三\t四\t五\t六");//输入当前月日历的标题行
for(int e=1;e<=sum%7;e++){
System.out.print(" \t");
}
if(a%4==0&&a%100!=0||a%400==0){
if(b==2){
for(int f=1;f<=29;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}else if(b==4&&b==6&&b==9&&b==11){
for(int f=1;f<=30;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}
for(int f=1;f<=31;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}
if(b==2){
for(int f=1;f<=28;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}else if(b==4&&b==6&&b==9&&b==11){
for(int f=1;f<=30;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
for(int f=1;f<=31;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}
}
}
复制代码
123.JPG
(29.26 KB, 下载次数: 22)
下载附件
2013-11-2 15:42 上传
作者:
高梦晓
时间:
2013-11-2 22:39
import java.util.*;
class Test
{
public static void main(String[] args){
System.out.println("请输入年月日。");
Scanner input=new Scanner(System.in);
System.out.println("请输入年份");
int a=input.nextInt();
System.out.println("请输入月份");
int b=input.nextInt();
System.out.println("请输入日期");
int c=input.nextInt();
System.out.println("您输入的是"+a+"年"+b+"月"+c+"日");//确定用户输入了正确的年月日
int sum=0;
int year;
for(year=1990;year<a;year++){
if(year%4==0&&year%100!=0||year%400==0){
sum=sum+366;
continue;
}
sum=sum+365;
continue;
}//通过计算,将输入日期与1990年1月1日整年天数计算出
for(int mouth=1;mouth<b;mouth++){
if(mouth==2){
if(a%4==0&&a%100!=0||a%400==0){
sum=sum+29;
continue;
}
sum=sum+28;
continue;
}else if(mouth==4||mouth==6||mouth==9||mouth==11){
sum=sum+30;
continue;
}
sum=sum+31;
}//通过计算,将输入日期与1990年1月1日整年加上正月天数计算出
sum=sum+1;//通过计算,将输入日期第一个月的第一天与1990年1月1日间天数计算出
System.out.println("日\t一\t二\t三\t四\t五\t六");//输入当前月日历的标题行
for(int e=1;e<=sum%7;e++){
System.out.print(" \t");
}
if(b==2){
int x = 28;
if(a%4==0&&a%100!=0||a%400==0) x = 29; //对代码做了一下优化
for(int f=1;f<=x;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}else if(b==4||b==6||b==9||b==11){ //此处逻辑判断错误,不应该是if(b==4&&b==6&&b==9&&b==11) 而应该是||
for(int f=1;f<=30;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}else{ //此处少了一个else
for(int f=1;f<=31;f++){
if(sum%7==6){
System.out.println(f+"\n");
sum++;
continue;
}
System.out.print(f+"\t");
sum++;
}
}
}
}
复制代码
作者:
喂,咱不离!
时间:
2013-11-2 23:02
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
sum = sum + 366;
continue;
在for循环时 for(语句1:语句2:语句4){
语句3} 你用了content 后 不会再执行后面的了year++了
再说你这里不用用cuntinue 程序也没有问题 下面也有cuntinue的问题
}
复制代码
下面还有很多 之所以打印一月不出事因为你在判断月的时候 是
for(int mouth=1;mouth<b;mouth++){
复制代码
看到了吧
作者:
王东
时间:
2013-11-2 23:49
package com.liqianru93;
import java.util.Scanner;
public class Rili {
public static void main(String[] args) {
System.out.println("请输入年月日。");
Scanner input = new Scanner(System.in);
System.out.println("请输入年份");
int a = input.nextInt();
System.out.println("请输入月份");
int b = input.nextInt();
System.out.println("请输入日期");
int c = input.nextInt();
System.out.println("您输入的是" + a + "年" + b + "月" + c + "日");// 确定用户输入了正确的年月日
int sum = 0;
int year;
for (year = 1990; year < a; year++) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
sum = sum + 366;
continue;
}
sum = sum + 365;
continue;
}// 通过计算,将输入日期与1990年1月1日整年天数计算出
for (int mouth = 1; mouth < b; mouth++) {
if (mouth == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
sum = sum + 29;
continue;
}
sum = sum + 28;
continue;
} else if (mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11) {
sum = sum + 30;
continue;
}
sum = sum + 31;
}// 通过计算,将输入日期与1990年1月1日整年加上正月天数计算出
sum = sum + 1;// 通过计算,将输入日期第一个月的第一天与1990年1月1日间天数计算出
System.out.println("日\t一\t二\t三\t四\t五\t六");// 输入当前月日历的标题行
for (int e = 1; e <= sum % 7; e++) {
System.out.print(" \t");
}
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
if (b == 2) {
for (int f = 1; f <= 29; f++) {
if (sum % 7 == 6) {
System.out.println(f + "\n");
sum++;
continue;
}
System.out.print(f + "\t");
sum++;
}
} else if (b == 4 && b == 6 && b == 9 && b == 11) {
for (int f = 1; f <= 30; f++) {
if (sum % 7 == 6) {
System.out.println(f + "\n");
sum++;
continue;
}
System.out.print(f + "\t");
sum++;
}
}
for (int f = 1; f <= 31; f++) {
if (sum % 7 == 6) {
System.out.println(f + "\n");
sum++;
continue;
}
System.out.print(f + "\t");
sum++;
}
}
if (b == 2) {
for (int f = 1; f <= 28; f++) {
if (sum % 7 == 6) {
System.out.println(f + "\n");
sum++;
continue;
}
System.out.print(f + "\t");
sum++;
}
} else if (b == 4 && b == 6 && b == 9 && b == 11) { //这里的逻辑判断有问题,应该为||
for (int f = 1; f <= 30; f++) {
if (sum % 7 == 6) {
System.out.println(f + "\n");
sum++;
continue;
}
System.out.print(f + "\t");
sum++;
}
} //就是下面那个大括号加错位置了,加到这里就行了
for (int f = 1; f <= 31; f++) {
if (sum % 7 == 6) {
System.out.println(f + "\n");
sum++;
continue;
}
System.out.print(f + "\t");
sum++;
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2