java日历,其中一种情况多了一个换行,该如何解决呢?

问题描述

java日历,其中一种情况多了一个换行,该如何解决呢?

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class rili {
public static final String JANUARY = "January";
public static final String FEBUARY = "Febuary";
public static final String MARCH = "March";
public static final String APRIL = "April";
public static final String MAY = "May";
public static final String JUN = "Jun";
public static final String JULY = "July";
public static final String AUGUST = "August";
public static final String SEPTERMBER = "Septermber";
public static final String OCTOBER = "October";
public static final String NOVEMBER = "November";
public static final String DECEMBER = "December";

private int year;

private int whatDayOnJanuaryOne;

public static void main(String[] args) throws Exception {

    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    for (int i = 0; i < n; i++) {
        int nian = in.nextInt();
        int yue = in.nextInt();
        // System.out.println();
        System.out
                .println("|--------------------------------------------------|");
        System.out.println(nian + "-" + yue);
        rili hd = new rili(nian);
        hd.printMonthOfYear(yue);
        System.out
                .println("|--------------------------------------------------|");
    }
}

public rili(int year) {
    this.year = year;
    try {
        setWhatDayOnJanuaryOne(getJanuaryOne(year));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void printMonthOfYear(int mon) throws Exception {
    if (mon < 1 || mon > 12) {
        return;
    }
    GregorianCalendar now = new GregorianCalendar();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date = sdf.parse(year + "-" + mon + "-01");
    now.setTime(date);
    int month = now.get(Calendar.MONTH);
    now.set(Calendar.DAY_OF_MONTH, 1);
    int week = now.get(Calendar.DAY_OF_WEEK);
    System.out.println("SuntMontTuetWedtThutFritSat");
    for (int i = Calendar.SUNDAY; i < week; i++) {
        System.out.print("t");
    }
    while (now.get(Calendar.MONTH) == month) {
        int day = now.get(Calendar.DAY_OF_MONTH);
        if (day < 10) {
            System.out.print("" + day + "t");
        } else {
            System.out.print("" + day + "t");
        }
        if (week == Calendar.SATURDAY) {
            System.out.println();
        }
        now.add(Calendar.DAY_OF_MONTH, 1);
        week = now.get(Calendar.DAY_OF_WEEK);
    }
    System.out.println();
}

public int getJanuaryOne(int year) throws Exception {
    int[] weekDays = { 0, 1, 2, 3, 4, 5, 6 };
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dt = sdf.parse(year + "-01-01");
    cal.setTime(dt);
    int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
    if (w < 0)
        w = 0;
    return weekDays[w];
}

protected void printFebuary() {
    if (this.year % 4 == 0) {

        printLeapYear();
    } else {

        printNonleapYear();
    }
}

private void printLeapYear() {
    for (int j = 1; j <= 29; j++) {
        String tmp = "";
        if (j == 1) {
            for (int k = 1; k <= this.whatDayOnJanuaryOne % 7; k++) {
                tmp = tmp + "      ";
            }
            tmp = tmp + "   " + j + "  ";
            if (this.whatDayOnJanuaryOne == 6) {
                System.out.println(tmp);
            } else {
                System.out.print(tmp);
            }
        } else if (j > 1 && j < 29) {

            if ((this.whatDayOnJanuaryOne + j) % 7 == 0) {
                System.out.println("   " + j);
            } else {
                if (j < 10) {
                    System.out.print("   " + j + "  ");
                } else {
                    System.out.print("   " + j + " ");
                }
            }
        } else if (j == 29) {
            System.out.println("   " + j);
            this.whatDayOnJanuaryOne = ((this.whatDayOnJanuaryOne + j) % 7);
        }
    }
}

private void printNonleapYear() {
    for (int j = 1; j <= 28; j++) {
        String tmp = "";
        if (j == 1) {
            for (int k = 1; k <= this.whatDayOnJanuaryOne % 7; k++) {
                tmp = tmp + "      ";
            }
            tmp = tmp + "   " + j + "  ";
            if (this.whatDayOnJanuaryOne == 6) {
                System.out.println(tmp);
            } else {
                System.out.print(tmp);
            }
        } else if (j > 1 && j < 28) {

            if ((this.whatDayOnJanuaryOne + j) % 7 == 0) {
                System.out.println("   " + j);
            } else {
                if (j < 10) {
                    System.out.print("   " + j + "  ");
                } else {
                    System.out.print("   " + j + " ");
                }
            }
        } else if (j == 28) {
            System.out.println("   " + j);
            this.whatDayOnJanuaryOne = ((this.whatDayOnJanuaryOne + j) % 7);
        }
    }
}

protected void print30() {
    for (int j = 1; j <= 30; j++) {
        String tmp = "";
        if (j == 1) {
            for (int k = 1; k <= this.whatDayOnJanuaryOne % 7; k++) {
                tmp = tmp + "      ";
            }
            tmp = tmp + "   " + j + "  ";
            if (this.whatDayOnJanuaryOne == 6) {
                System.out.println(tmp);
            } else {
                System.out.print(tmp);
            }
        } else if (j > 1 && j < 30) {

            if ((this.whatDayOnJanuaryOne + j) % 7 == 0) {
                System.out.println("   " + j);
            } else {
                if (j < 10) {
                    System.out.print("   " + j + "  ");
                } else {
                    System.out.print("   " + j + " ");
                }
            }
        } else if (j == 30) {
            System.out.println("   " + j);
            this.whatDayOnJanuaryOne = ((this.whatDayOnJanuaryOne + j) % 7);
        }
    }
}

protected void print31() {
    for (int j = 1; j <= 31; j++) {
        String tmp = "";
        if (j == 1) {
            for (int k = 1; k <= this.whatDayOnJanuaryOne % 7; k++) {
                tmp = tmp + "      ";
            }
            tmp = tmp + "   " + j + "  ";
            if (this.whatDayOnJanuaryOne == 6) {
                System.out.println(tmp);
            } else {
                System.out.print(tmp);
            }
        } else if (j > 1 && j < 31) {

            if ((this.whatDayOnJanuaryOne + j) % 7 == 0) {
                System.out.println("   " + j);
            } else {
                if (j < 10) {
                    System.out.print("   " + j + "  ");
                } else {
                    System.out.print("   " + j + " ");
                }
            }
        } else if (j == 31) {
            System.out.println("   " + j);
            this.whatDayOnJanuaryOne = ((this.whatDayOnJanuaryOne + j) % 7);
        }
    }
}

public String getMonth(int m) {
    String month = "";
    switch (m) {
    case 1:
        month = JANUARY;
        break;
    case 2:
        month = FEBUARY;
        break;
    case 3:
        month = MARCH;
        break;
    case 4:
        month = APRIL;
        break;
    case 5:
        month = MAY;
        break;
    case 6:
        month = JUN;
        break;
    case 7:
        month = JULY;
        break;
    case 8:
        month = AUGUST;
        break;
    case 9:
        month = SEPTERMBER;
        break;
    case 10:
        month = OCTOBER;
        break;
    case 11:
        month = NOVEMBER;
        break;
    case 12:
        month = DECEMBER;
        break;
    }
    return month;
}

public int getYear() {
    return year;
}

public void setYear(int year) {
    this.year = year;
}

public int getWhatDayOnJanuaryOne() {
    return whatDayOnJanuaryOne;
}

public void setWhatDayOnJanuaryOne(int whatDayOnJanuaryOne) {
    this.whatDayOnJanuaryOne = whatDayOnJanuaryOne;
}

}

第一行输入一个组数n,表示显示日历的组数。 每一组数据包括年份和月份。
例如当输入2015年2月时,就会多一个换行

解决方案

 public static void main(String[] args) throws Exception {

    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    for (int i = 0; i < n; i++) {
        int nian = in.nextInt();
        int yue = in.nextInt();
        // System.out.println();
        System.out
                .println("|--------------------------------------------------|");
        System.out.println(nian + "-" + yue);
        rili hd = new rili(nian);
        hd.printMonthOfYear(yue);
                if(i==n-1){//判断是否是最后一个
        System.out
                .print("|--------------------------------------------------|");
                }else{
        System.out
                .println("|--------------------------------------------------|");
                }
    }
}

解决方案二:

补充一下,是28后下多的那个换行
1
2015 2
|--------------------------------------------------|
2015-2
Sun Mon Tue Wed Thu Fri Sat
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

|--------------------------------------------------|

时间: 2024-10-01 15:02:42

java日历,其中一种情况多了一个换行,该如何解决呢?的相关文章

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法(转)

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

《 Java并发编程从入门到精通》 常见的内存溢出的三种情况

作者:张振华    购买链接:天猫商城  JD商城  当当书店 鸟欲高飞先振翅,人求上进先读书.本文是原书的第9章 线程的监控及其日常工作中如何分析里的9.3.3节常见的内存溢出的三种情况. 3. 常见的内存溢出的三种情况: 1)JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置.Heap的大小是Young Gene

java 日历中用户创建一个跨天的事件提醒,那么我的java日历应当如何去记录并打印出这样的事件呢?

问题描述 java 日历中用户创建一个跨天的事件提醒,那么我的java日历应当如何去记录并打印出这样的事件呢? 一个班级假如有100个同学,现在我们按照学号随机选择连续学号的42名同学,这42名同学一排7人分为6排,然后按照他们这一年来参加活动的多少来给分,规定一个同学参加一次班级活动就给这位同学1分,参加一次团体表演(你可以认为参加团体表演的人都是按照学号顺序相邻的,比如从1到10号的同学,他们一块进行了一场团体表演,学号15-30的16位同学一块进行了一次团体表演等,这些人每人都能获得1分)

c++-一个简单的C++程序,第二种情况出现错误。

问题描述 一个简单的C++程序,第二种情况出现错误. void func(forward_list &lst string s1 string s2){ auto current = lst.begin(); auto prev = lst.before_begin(); while (*current != s1 && current != lst.end()) prev = current++; if (current != lst.end()) lst.insert_afte

java中,哪种情况hashcode一样,但是equal却不一定相等

问题描述 java中,哪种情况hashcode一样,但是equal却不一定相等 hashcode一样,内存地址应该也一样,那么说明是一样的对象或者变量,那为什么还要说,先判断hashcode是否一样,如果一样了,再去判断equal,用来确定不一样的结果 解决方案 考虑一种极端情况,如果你的程序有多于2^32个对象,无论你的hash算法是什么,显然用int表示hashcode肯定有重复. 解决方案二: 因为hash code是通过哈希函数来映射的,肯定会出现两个不同key的hash值相同,这就是哈

Java中四种XML解析技术之不完全测试

xml 在平时工作中,难免会遇到把XML作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历XML这块来测试,因为遍历XML是工作中使用最多的(至少我认为). 预备 测试环境: AMD毒龙1.4G OC 1.5G.256M DDR333.Windows2000 Server SP4.Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在Debug模式下测试. XML文件格式如下: <?xml ver

通过JDBC操纵Oracle数据库LOB字段的几种情况分析

oracle|数据|数据库 通过JDBC操纵Oracle数据库LOB字段的几种情况分析纵横软件制作中心 雨亦奇2003-6-10 15:14:19在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象.档案等).而LONG.LONG RAW等类型的字段,虽然存储容量也不小(可达2GB),但由于一个表中只能有一个这样类型的字段的

倪叶明:几种情况导致网站难以被搜索引擎收录

对于每个站长来说,对自己的网站关心程度超过了一切了,每天必须要查看排名,收录,等一系列的数据,然而最关键的莫过于搜索引擎是否能够正常收录,一旦网站不能正常收录就担心这个担心那个,尤其是新站的站长们,刚上线的站百度一直都不收录非常的着急,却有不知道该怎么办,其实搜索引擎是一个程序,它根据一些固有的标准来评判站点的好坏,一旦站点有问题,搜索引擎将无法对站点进行采集. 所以一旦网站不收录,那么应该从网站的根本上找原因,为什么网站不收录或者收录比较的慢,我们从以下几点来分析以下: 第一:网站没有完全建设

关于Java中的继承和组合的一个错误使用的例子

关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚,论证不清晰,欢迎大家留言指正. 什么是「组合」和「继承」 假设有2个class:A和B: 如果class A extends B 那么我们就说A继承B,A是子类,B是父类,这种情况就是继承. 如果A中有一个属性的类型为B,那么我们就说这种情况就是组合. 分别在什么情况下使用 回想一些我们一般会在什么情况下考虑这