package kgc.copy;
import java.util.Scanner;
public class Java1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//样子 星期几要对上 要随机输入年份 出来对应的日期
//样子出来了,现在思考得到 我只要知道每个月的第一天是星期几,和这个月的天数,我就能得出准确的日期表
//封装好了,现在问题在第一天和月的天数了吧,第一天是星期几要算出距离1990年1.1多少天吧
int year1;
Scanner ss=new Scanner(System.in);
System.out.println("请输入大于1990的年份!!!");//用户输入年份 要求大于1990年
year1=ss.nextInt();
for (int k = 1; k <=12; k++) {
System.out.println(k+"月份!!!");//每个月
method2(year1,k);//调方法传入年 遍历的所有月份
}
ss.close();
}
public static void method1(int d, int md) {
String[] mat = new String[] { "一\t", "二\t", "三\t", "四\t", "五\t", "六\t", "日\t" };
for (int i = 0; i < mat.length; i++) {
System.out.print(mat[i]);
}
for (int i = 0; i < d + md; i++) {
if (i % 7 == 0) {//每隔7个换行
System.out.println("");
}
if (i < d ) {//判读空格代替
System.out.print("\t");
} else {
System.out.print(i - (d - 1) + "\t");
}
}
System.out.println("");
}
public static void method2(int year,int month) {//method2方法
int d;//求总天数%7下的星期 也就是空格
int md;//求出月的天数
int totalday =0;
//for循环求出总天数
for (int i = 1990; i < year; i++) {
if (i%4==0&&i%100!=0||i%400==0) {//判断闰年
totalday+=366;//闰年加366天
}else {
totalday+=365;//不是闰年加365天
}
}
for (int j = 1; j < month; j++) {//补加当前月的总天数
switch (j) {
case 2:
if (year%4==0&&year%100!=0||year%400==0) {//判断闰年
totalday+=29;//闰年加29天
}else {
totalday+=28;//不是闰年加28天
}
break;
case 4:
totalday+=30;//小月加30天
break;
case 6:
totalday+=30;
break;
case 9:
totalday+=30;
break;
case 11:
totalday+=30;
break;
default:
totalday+=31;//大月加31天
break;
}//结束for循环 补加当前月的总天数
}
d=totalday%7;//求总天数%7下的星期 也就是空格
switch (month) {//判断月的天数
case 2:
if (year%4==0&&year%100!=0||year%400==0) {
md=29;//闰年2月为29天
}else {
md=28;//闰年2月为28天
}
break;
case 4:
md=30;//小月为30天
break;
case 6:
md=30;
break;
case 9:
md=30;
break;
case 11:
md=30;
break;
default:
md=31;//大月为31天
break;
}
method1(d,md);//调方法 传入星期和天数
}
}
二维写法
package kgc.copy;
import java.util.Scanner;
public class Java2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//样子 星期几要对上 要随机输入年份 出来对应的日期
//样子出来了,现在思考得到 我只要知道每个月的第一天是星期几,和这个月的天数,我就能得出准确的日期表
//封装好了,现在问题在第一天和月的天数了吧,第一天是星期几要算出距离1990年1.1多少天吧
int year1;
Scanner ss=new Scanner(System.in);
System.out.println("请输入大于1990的年份!!!");//用户输入年份 要求大于1990年
year1=ss.nextInt();
for (int k = 1; k <=12; k++) {
System.out.println(k+"月份!!!");//每个月
method2(year1,k);//调方法传入年 遍历的所有月份
}
ss.close();
}
public static void method1(int gz, int month1) {
String[] arr = new String[] { "一\t", "二\t", "三\t", "四\t", "五\t", "六\t", "日\t" };
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println("");
for (int j = 0; j < 5; j++) {//二维数组 一共五行
switch (j) {//判断是第几行
case 0://第一行
for (int k = 0; k < 7; k++) {
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
if (k < gz) {
System.out.print("\t");//输出空格
} else {
System.out.print((k + 1) + 7 * j - gz + "\t");
}
}
System.out.println("");
break;
case 1://第二行
for (int k = 0; k < 7; k++) {
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
case 2://第三行
for (int k = 0; k < 7; k++) {
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
case 3://第四行
for (int k = 0; k < 7; k++) {
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
case 4://第五行
switch (month1) {//第五行判断有多少天
case 31:
for (int k = 0; k < 3 + gz; k++) { //3==31天
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
case 30:
for (int k = 0; k < 2 + gz; k++) {//2==30天
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
case 29:
for (int k = 0; k < 1 + gz; k++) {//1==29天
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
case 28:
for (int k = 0; k < 0 + gz; k++) {//0==28天
if (k % 7 == 0) {//每隔7个换行
System.out.println("");
}
System.out.print((k + 1) + 7 * j - gz + "\t");
}
System.out.println("");
break;
}
}
}
}
public static void method2(int year,int month) {//method2方法
int d;//求总天数%7下的星期 也就是空格
int md;//求出月的天数
int totalday =0;
//for循环求出总天数
for (int i = 1990; i < year; i++) {
if (i%4==0&&i%100!=0||i%400==0) {//判断闰年
totalday+=366;//闰年加366天
}else {
totalday+=365;//不是闰年加365天
}
}
for (int j = 1; j < month; j++) {//补加当前月的总天数
switch (j) {
case 2:
if (year%4==0&&year%100!=0||year%400==0) {//判断闰年
totalday+=29;//闰年加29天
}else {
totalday+=28;//不是闰年加28天
}
break;
case 4:
totalday+=30;//小月加30天
break;
case 6:
totalday+=30;
break;
case 9:
totalday+=30;
break;
case 11:
totalday+=30;
break;
default:
totalday+=31;//大月加31天
break;
}//结束for循环 补加当前月的总天数
}
d=totalday%7;//求总天数%7下的星期 也就是空格
switch (month) {//判断月的天数
case 2:
if (year%4==0&&year%100!=0||year%400==0) {
md=29;//闰年2月为29天
}else {
md=28;//闰年2月为28天
}
break;
case 4:
md=30;//小月为30天
break;
case 6:
md=30;
break;
case 9:
md=30;
break;
case 11:
md=30;
break;
default:
md=31;//大月为31天
break;
}
method1(d,md);//调方法 传入星期和一个月天数
}
}
结果如下: