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

解决方案 »

  1.   

    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();
    }
    }
    }不知是不是你的意思,感觉有些无语
      

  2.   

    定义一个三维数组
    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控制写入的格式
      

  3.   

    偷下懒 借用 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;
    } }}
      

  4.   

    刚看到类似的东西,差不多可以解决您的问题,没有找到原链接,只能引用下别人的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);
    }}