当前位置:编程学习 > JAVA >>

急求解决java万年历问题

控制台输入四位年份  自动生成该年份日历  保存在文本文件中   每行三个月(这是重点解决不了!!!)

跪求了!!!! 日历 java --------------------编程问答-------------------- 度娘。。。。。。 --------------------编程问答-------------------- 得到3个月的排列数据,按格式写入文件就是了啊。每个月的数据要能分出每周包含这个月的哪几天,可以用一个二维数组来表示 --------------------编程问答-------------------- 每行三个月?不懂 --------------------编程问答-------------------- 文本文件的话,这输出格式有的你控制了。。。 --------------------编程问答--------------------
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);
}

}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,