您的位置:首页 > 编程语言 > Java开发

Java流程控制练习--万年历

2018-07-28 09:34 621 查看

Java流程控制练习--万年历

标签: Java入坑之旅

0x01. 打印倒三角和正三角

public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
int j;

/**
*  要求:打印一个倒三角以及一个正三角
*  方法:双层循环
**/
for(i=3;i>0;i--) {
for(j=1;j<=i;j++) {
System.out.print("*");
}
System.out.println();
}
for(i=1;i<4;i++) {
for(j=1;j<=i;j++) {
System.out.print("*");
}
System.out.println();
}
}
Output:
***
**
*
*
**
***

0x02. 九九乘法表1(正立)

public static void main(String[] args) {
// TODO Auto-generated method stub
/**
*  要求:打印九九乘法表
*  方法:双层循环
**/
for(int i = 1;i<=9;i++) {
for(int j = 1;j<=i;j++) {
System.out.printf("%d*%d=%-2d\t",j,i,i*j);
}
System.out.println();
}
}
Output:
1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

0x03. 九九乘法表2(倒立)

public static void main(String[] args) {
for (int i = 1;  i <= 9; ++i) {
for (int j = 1; j <= 9; j++) {
if(j < i) {
//输出的空格由"%2d*%2 =%-2d "决定
System.out.print("        ");
}
else {
System.out.printf("%d*%d=%-2d\t", i ,j , i*j);
}
}
System.out.println();
}
}
Output:
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9
2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18
3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27
4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36
5*5=25  5*6=30  5*7=35  5*8=40  5*9=45
6*6=36  6*7=42  6*8=48  6*9=54
7*7=49  7*8=56  7*9=63
8*8=64  8*9=72
9*9=81

0x04. 万年历 calendar

4.1 求解思路

例1:1900年02月。

  1. 1900年为平年,02月为28天。
  2. 02月01日距离01月01日有(30+1=31)31天。
  3. 每7天为1周,(31%7=3)所以02月01日就是星期三(date[0]为星期日)。
  4. 从01号开始循环输出到28即可;

例2:1900年04月。

  1. 1900年为平年,02月有28天。
  2. 04月01日距离01月01日有(30+28+31+1=90)90天。
  3. 每7天为1周,(90%7=6)所以04月01日就是星期六(date[0]为星期日)。
  4. 从01号开始循环输出到30即可;

4.2 算法思路

  1. 确认输入年份是否为闰年。如果是闰年,则2月天数为29,否则为28天。
  2. 求解输入的月份距离1900年1月1日的天数;
  3. 确定这个月的01号是星期几;
  4. 从01号开始输出到这个月的最后一天即可。

4.3 Java代码

package com.ryanjie.test0727;

import java.util.Scanner;
public class Calendar {

/**
*
* @title: leapYear
* @description:判断输入年是否为闰年
* @author: Ryanjie
* @date 2018年7月30日 下午8:35:30
* @param year
* @return
*
*/
static boolean leapYear(int year){
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
// 是闰年
return true;
}

else {
//是平年
return false;
}
}

/* 用N表示起始年份 */
static final int N = 1900;

/**
*
* @title: monthCalendar
* @description:首先确认当前月距离1900年1月1日的天数,之后判断出这个月的01号为星期几,
*              之后控制输出日历
* @author: Ryanjie
* @date 2018年7月30日 下午8:32:26
* @param currentYear
* @param currentMonth
*
*/
static void monthCalendar(int currentYear,int currentMonth) {

// sumdays 用来存储一共有多少天
int sumdays = 0;

// 存储12个月的天数( 没有0月,所以month[0]=0 )
int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

// 存储1900-11969中的每一年的01月01号是星期几 year[0] = 1代表1970年01月01日为星期一
for(int i = N;i < currentYear;i ++) {

// days用来存储前一年一共多少天(366/365)
int days = 365;
if(leapYear(i)) {
days ++;
sumdays = sumdays + days;
}
else{
sumdays = sumdays + days;
}
}

// 如果是闰年,2月改为29号
if(leapYear(currentYear)){
month[2] = 29;
}

for(int i=1;i<currentMonth;i++){
sumdays = sumdays + month[i];
}

// week 用来存储当前月01号是星期几
int week;
week = (sumdays + 1) % 7;

System.out.println("星期日\t" + "星期一\t" + "星期二 \t" + "星期三 \t" + "星期四 \t" + "星期五 \t" + "星期六 \t");
System.out.println();

// 输出控制
for(int i = 0;i < week; i++) {
System.out.print(" \t");
}
for(int i = 1; i <= month[currentMonth]; i ++) {
System.out.printf(" %-2d \t",i);
if ((week) % 7 == 6) {
System.out.println();
}
week ++;
}

}

public static void main(String[] args){

while(true) {
int month ,year;
Scanner in = new Scanner(System.in);
System.out.println();
System.out.println("********欢迎您使用万年历!********");
System.out.println("请输入年份<1900~11900>:");
year = in.nextInt();
if(year < 1900){
System.out.println("输入年份不合法,请重新输入!");
year = in.nextInt();
}
System.out.println("请输入月份<1~12> :");
month = in.nextInt();
if(month < 1  ||  month > 12){
System.out.println("输入月份不合法,请重新输入!");
month = in.nextInt();
}
monthCalendar(year,month);
System.out.println();
System.out.println("********感谢您使用万年历!********");
}
}
}
Output:

********欢迎您使用万年历!********
请输入年份<1900~11900>:
2018
请输入月份<1~12> :
7
星期日 星期一 星期二     星期三     星期四     星期五     星期六

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
********感谢您使用万年历!********

emmmm...格式是对的,但是一复制到markdown就会错位....

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: