急求解决java万年历问题 控制台输入四位年份 自动生成该年份日历 保存在文本文件中 每行三个月(这是重点解决不了!!!)跪求了!!!!日历java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package com.love.yan.xing;import java.io.IOException;import java.io.RandomAccessFile;import java.util.Scanner;public class WanLiYear { /** * @param args */ public static void main(String[] args) { int a[][]=new int[][] {{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}}; String[] day={" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9"," 10"," 11"," 12"," 13"," 14"," 15"," 16", " 17"," 18"," 19"," 20"," 21"," 22"," 23"," 24"," 25"," 26"," 27"," 28"," 29"," 30"," 31"}; String s =""; Scanner r=new Scanner(System.in); System.out.println("请输入年份:"); int year=r.nextInt(); if(year%4==0&&year%100!=0||(year%400==0)) { for(int i=0;i<12;i++){ for(int j=0;j<a[0][i];j++){ s=s+day[j]; } if((i+1)%3==0){ s=s+"\r\n"; } } } else { for(int i=0;i<12;i++){ for(int j=0;j<a[1][i];j++){ s=s+day[j]; } if((i+1)%3==0){ s=s+"\r\n"; } } } try { RandomAccessFile rf = new RandomAccessFile("c:\\RiLi.txt", "rw"); long pof = 0, lof = rf.length(); int comp = 0; rf.seek(pof); while (pof < lof) { comp = comp+ rf.readLine().getBytes().length+ 2; pof = rf.getFilePointer(); } String msg =s; byte[] ob = new byte[msg.length()]; ob = msg.getBytes(); pof = comp; rf.seek(pof); rf.write(ob); System.out.println("完成操作!"); rf.close(); } catch (IOException eee) { eee.printStackTrace(); } }}不知是不是你的意思,感觉有些无语 定义一个三维数组int[][][] monthDays[12][6][7]12 表示12个月份,6,7表示每个月分的日期有6行7列计算出每个月分的日历排列情况,保存在数组中例如 2013年3月的日历为monthDays[2][][]={{0,0,0,0,0,1,2},{3,4,5,6,7,8,9}……}然后用个for循环for(int i=0;i<12;i=i+3){//循环月份 for(int r=0;r<6;r++){//循环行 writeDay(monthDays[i][r][]); writeDay(monthDays[i+1][r][]); writeDay(monthDays[i+2][r][]); 写入 换行 }}/**/writeDay(int[] arr){ for(int i=0;i<arr.Length;i++){ if(arr[i]==0) 写入空格 \t else 写入 arr[i] \t }}利用 \t控制写入的格式 偷下懒 借用 yanxing2012 的文件写入代码package wnl.src;import java.io.IOException;import java.io.RandomAccessFile;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Locale;import java.util.Scanner;public class WNL { int[][][] monthDays = new int[12][6][7]; int year = 2013; String s=""; public static void main(String[] args) { // TODO Auto-generated method stub WNL wnl = new WNL(); System.out.println("输入年份(四位整数)"); Scanner r=new Scanner(System.in); wnl.year = r.nextInt(); wnl.writeFile(); } private void writeFile() { writeWNL(); try { RandomAccessFile rf = new RandomAccessFile("c:\\RiLi.txt", "rw"); long pof = 0, lof = rf.length(); int comp = 0; rf.seek(pof); while (pof < lof) { comp = comp+ rf.readLine().getBytes().length+ 2; pof = rf.getFilePointer(); } String msg =s; byte[] ob = new byte[msg.length()]; ob = msg.getBytes(); pof = comp; rf.seek(pof); rf.write(ob); System.out.println("完成操作!"); rf.close(); } catch (IOException eee) { eee.printStackTrace(); } } private void writeWNL() { for (int m = 1; m <= 12; m++) { monthDays(year, m); } for (int i = 0; i < 12; i = i + 3) {// 循环月份 for (int r = 0; r < 6; r++) {// 循环行 writeDay(monthDays[i][r]); writeDay(monthDays[i + 1][r]); writeDay(monthDays[i + 2][r]); writeDay(null); } } } private void writeDay(int[] days) { if (days == null) { s += "\r\n"; System.out.println(); return; } for (int i = 0; i < days.length; i++) { if(days[i]==0){ s += "\t"; System.out.print(" "+"\t"); }else{ s += days[i]+"\t"; System.out.print(days[i] + "\t"); } } } private void monthDays(int year, int month) { SimpleDateFormat oSdf = new SimpleDateFormat("", Locale.ENGLISH); oSdf.applyPattern("yyyyMM"); String date = String.valueOf(year*100+ month); Calendar cal = new GregorianCalendar(); try { cal.setTime(oSdf.parse(date)); } catch (ParseException e) { e.printStackTrace(); } int firstWeek = cal.get(Calendar.DAY_OF_WEEK) - 1; int dayNum = cal.getActualMaximum(Calendar.DAY_OF_MONTH); /** 重置 */ for (int i = 0; i < monthDays[month-1].length; i++) { for (int j = 0; j < monthDays[month-1][0].length; j++) { monthDays[month-1][i][j] = 0; } } /** 写入 */ for (int i = 0; i < dayNum; i++) { int ii = (i + firstWeek) / 7; int jj = (i + firstWeek) % 7; monthDays[month-1][ii][jj] = i + 1; } }} 刚看到类似的东西,差不多可以解决您的问题,没有找到原链接,只能引用下别人的Code了,望原作者见谅!public class TestYear { public TestYear(int year, int month) { int cols = 1; int days = 1; for (int i = 1; i < year; i++) { if (((i % 100 != 0) && (i % 4 == 0)) || (i % 400 == 0)) days += 366; else days += 365; } for (int j = 1; j < month; j++) { switch (j) { case 1:case 3:case 5:case 7:case 8:case 10:case 12: days += 31; break; case 2: if (((year % 100 != 0) && (year % 4 == 0)) || (year % 400 == 0)) days += 29; else days += 28; break; default: days += 30; break; } } System.out.println("============" + days); cols = days % 7; printDate(year, month, cols); System.out.println("============" + cols); } public void printDate(int year, int month, int cols) { int days = 0; int i = year; int j = month; switch (j) { case 1:case 3:case 5:case 7:case 8:case 10:case 12: days = 31; break; case 2: if (((i % 100 != 0) && (i % 4 == 0)) || (i % 400 == 0)) days = 29; else days = 28; break; default: days = 30; break; } System.out.println("\t日" + "\t一" + "\t二" + "\t三" + "\t四" + "\t五" + "\t六"); for (int m = 1; m <= cols; m++){ System.out.print("\t"); } for (int k = 1; k <= days; k++) { System.out.print("\t" + k); cols++; if (cols >= 7) { System.out.println(""); cols = 0; } } System.out.println(""); } /** * @param args */ public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入年份"); int A = in.nextInt(); System.out.println("请输入月份"); int B = in.nextInt(); TestYear d1 = new TestYear(A, B); }} 关于自动子类调用父类无参构造函数的问题 如何分割一个大的ByteBuffer? 生成内部类的语法是这样吗??? 弱弱的问题,高手指点阿! 我的24点算法,希望大家执正 有必要加上这句吗? ??????????请问如何让一个树节点能够带上2个属性?再线等待! javax.http.*在哪里有,怎样融入自已的开发系统 页面上点击button后使其禁止点击的javascript函数如何写? Jbuilder的路径设置问题? log4j不起作用 Windows Server 2003 Enterprise R2 - CD2 - 英文版本的序列号
import java.io.RandomAccessFile;
import java.util.Scanner;public class WanLiYear { /**
* @param args
*/
public static void main(String[] args) {
int a[][]=new int[][] {{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};
String[] day={" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9"," 10"," 11"," 12"," 13"," 14"," 15"," 16",
" 17"," 18"," 19"," 20"," 21"," 22"," 23"," 24"," 25"," 26"," 27"," 28"," 29"," 30"," 31"};
String s ="";
Scanner r=new Scanner(System.in);
System.out.println("请输入年份:");
int year=r.nextInt();
if(year%4==0&&year%100!=0||(year%400==0))
{
for(int i=0;i<12;i++){
for(int j=0;j<a[0][i];j++){
s=s+day[j];
}
if((i+1)%3==0){
s=s+"\r\n";
}
}
}
else
{
for(int i=0;i<12;i++){
for(int j=0;j<a[1][i];j++){
s=s+day[j];
}
if((i+1)%3==0){
s=s+"\r\n";
}
}
}
try {
RandomAccessFile rf = new RandomAccessFile("c:\\RiLi.txt", "rw");
long pof = 0, lof = rf.length();
int comp = 0;
rf.seek(pof);
while (pof < lof) {
comp = comp+ rf.readLine().getBytes().length+ 2;
pof = rf.getFilePointer();
}
String msg =s;
byte[] ob = new byte[msg.length()];
ob = msg.getBytes();
pof = comp;
rf.seek(pof);
rf.write(ob);
System.out.println("完成操作!");
rf.close();
} catch (IOException eee) {
eee.printStackTrace();
}
}
}不知是不是你的意思,感觉有些无语
int[][][] monthDays[12][6][7]
12 表示12个月份,6,7表示每个月分的日期有6行7列
计算出每个月分的日历排列情况,保存在数组中
例如 2013年3月的日历为
monthDays[2][][]={{0,0,0,0,0,1,2},{3,4,5,6,7,8,9}……}然后用个for循环
for(int i=0;i<12;i=i+3){//循环月份
for(int r=0;r<6;r++){//循环行
writeDay(monthDays[i][r][]);
writeDay(monthDays[i+1][r][]);
writeDay(monthDays[i+2][r][]);
写入 换行
}
}/**/
writeDay(int[] arr){
for(int i=0;i<arr.Length;i++){
if(arr[i]==0)
写入空格 \t
else
写入 arr[i] \t
}
}
利用 \t控制写入的格式
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Scanner;public class WNL { int[][][] monthDays = new int[12][6][7]; int year = 2013;
String s="";
public static void main(String[] args) {
// TODO Auto-generated method stub
WNL wnl = new WNL();
System.out.println("输入年份(四位整数)");
Scanner r=new Scanner(System.in);
wnl.year = r.nextInt();
wnl.writeFile();
} private void writeFile() {
writeWNL();
try {
RandomAccessFile rf = new RandomAccessFile("c:\\RiLi.txt", "rw");
long pof = 0, lof = rf.length();
int comp = 0;
rf.seek(pof);
while (pof < lof) {
comp = comp+ rf.readLine().getBytes().length+ 2;
pof = rf.getFilePointer();
}
String msg =s;
byte[] ob = new byte[msg.length()];
ob = msg.getBytes();
pof = comp;
rf.seek(pof);
rf.write(ob);
System.out.println("完成操作!");
rf.close();
} catch (IOException eee) {
eee.printStackTrace();
}
}
private void writeWNL() {
for (int m = 1; m <= 12; m++) {
monthDays(year, m);
}
for (int i = 0; i < 12; i = i + 3) {// 循环月份
for (int r = 0; r < 6; r++) {// 循环行
writeDay(monthDays[i][r]);
writeDay(monthDays[i + 1][r]);
writeDay(monthDays[i + 2][r]);
writeDay(null);
}
}
} private void writeDay(int[] days) {
if (days == null) {
s += "\r\n";
System.out.println();
return;
}
for (int i = 0; i < days.length; i++) {
if(days[i]==0){
s += "\t";
System.out.print(" "+"\t");
}else{
s += days[i]+"\t";
System.out.print(days[i] + "\t");
}
} } private void monthDays(int year, int month) {
SimpleDateFormat oSdf = new SimpleDateFormat("", Locale.ENGLISH);
oSdf.applyPattern("yyyyMM");
String date = String.valueOf(year*100+ month);
Calendar cal = new GregorianCalendar();
try {
cal.setTime(oSdf.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
int firstWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
int dayNum = cal.getActualMaximum(Calendar.DAY_OF_MONTH); /** 重置 */
for (int i = 0; i < monthDays[month-1].length; i++) {
for (int j = 0; j < monthDays[month-1][0].length; j++) {
monthDays[month-1][i][j] = 0;
}
}
/** 写入 */
for (int i = 0; i < dayNum; i++) {
int ii = (i + firstWeek) / 7;
int jj = (i + firstWeek) % 7;
monthDays[month-1][ii][jj] = i + 1;
} }}
public TestYear(int year, int month) {
int cols = 1;
int days = 1; for (int i = 1; i < year; i++) {
if (((i % 100 != 0) && (i % 4 == 0)) || (i % 400 == 0))
days += 366;
else
days += 365;
} for (int j = 1; j < month; j++) {
switch (j) {
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days += 31;
break;
case 2:
if (((year % 100 != 0) && (year % 4 == 0)) || (year % 400 == 0))
days += 29;
else
days += 28;
break;
default:
days += 30;
break;
}
}
System.out.println("============" + days);
cols = days % 7;
printDate(year, month, cols);
System.out.println("============" + cols);
} public void printDate(int year, int month, int cols) {
int days = 0;
int i = year;
int j = month;
switch (j) {
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days = 31;
break;
case 2:
if (((i % 100 != 0) && (i % 4 == 0)) || (i % 400 == 0))
days = 29;
else
days = 28;
break;
default:
days = 30;
break;
}
System.out.println("\t日" + "\t一" + "\t二" + "\t三" + "\t四" + "\t五"
+ "\t六");
for (int m = 1; m <= cols; m++){
System.out.print("\t");
}
for (int k = 1; k <= days; k++) {
System.out.print("\t" + k);
cols++;
if (cols >= 7) {
System.out.println("");
cols = 0;
}
}
System.out.println("");
} /**
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入年份");
int A = in.nextInt();
System.out.println("请输入月份");
int B = in.nextInt();
TestYear d1 = new TestYear(A, B);
}}