Java流程控制练习--万年历
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月。
- 1900年为平年,02月为28天。
- 02月01日距离01月01日有(30+1=31)31天。
- 每7天为1周,(31%7=3)所以02月01日就是星期三(date[0]为星期日)。
- 从01号开始循环输出到28即可;
例2:1900年04月。
- 1900年为平年,02月有28天。
- 04月01日距离01月01日有(30+28+31+1=90)90天。
- 每7天为1周,(90%7=6)所以04月01日就是星期六(date[0]为星期日)。
- 从01号开始循环输出到30即可;

4.2 算法思路
- 确认输入年份是否为闰年。如果是闰年,则2月天数为29,否则为28天。
- 求解输入的月份距离1900年1月1日的天数;
- 确定这个月的01号是星期几;
- 从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就会错位....
Java流程控制练习--万年历的更多相关文章
- JAVA流程控制
JAVA流程控制 example1: --输出九九乘法表 public class chengfabiao { public static void main (String[] args){ ...
- Java学习笔记之:Java流程控制
一.介绍 Java流程控制包括顺序控制.条件控制和循环控制. 顺序控制,就是从头到尾依次执行每条语句操作.条件控制,基于条件选择执行语句,比方说,如果条件成立,则执行操作A,或者如果条件成立,则执行操 ...
- Java 流程控制
Java 流程控制 Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支 ...
- JAVA 流程控制之选择语句
在程序设计时,有三种基本技术可以改变程序的流程控制: 调用方法: 选择: 循环. 在这里,我们主要来讲讲选择语句. JAVA中的选择语句与C语言中的基本相同,包括: if 语句: if/else 语句 ...
- 《快乐编程大本营》java语言训练班-第4课:java流程控制
<快乐编程大本营>java语言训练班-第4课:java流程控制 第1节. 顺序执行语句 第2节. 条件分支语句:if条件语句 第3节. 条件分支语句:switch 条件语句 第4节. 条件 ...
- Java流程控制,for,switch,while.break,continue,return
Java流程控制,for,switch,while.break,continue,return
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
随机推荐
- vue 有关框架
iview-admin https://github.com/iview/iview-admin/ axios https://www.kancloud.cn/yunye/axios/234845
- ThreadLocal变量
什么是ThreadLocal变量?ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多.可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副 ...
- scheme 之门
scheme 之门 开始之前 这是一篇 Scheme 的介绍文章. Scheme 是一个 LISP 的方言, 相对于 Common LISP 或其他方言, 它更强调理论的完整和优美, 而不那么强调实用 ...
- 【题解】 [HNOI2005]狡猾的商人(差分约束)
题面懒得复制,戳我戳我 Solution: 其实这个差分是挺显然的,我们可以用\(s[i]\)表示从第\(1\)到\(i\)中间的收入和 重点就在式子,比如读入\(a\),\(b\),\(c\),显然 ...
- 自学huawei之路-AC6005-8AP添加授权码
返回自学Huawei之路 自学huawei之路-AC6005-8AP添加授权码
- 51nod1134——(最长上升子序列)
给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个 ...
- solr的基本使用
Solr 概念: 1. 搜索引擎的技术,建立在Lucene之上,可以解决跨平台,跨语言的问题.(Lucene本身是个jar包,也就是API,不能独立运行,需要程序的调用来完成全局检索,不具备跨平台,跨 ...
- [IOI2018] werewolf 狼人
[IOI2018] werewolf 狼人 IOI2018题解 (其实原题强制在线,要用主席树) 代码: 注意: 1.下标从0~n-1 2.kruskal重构树开始有n个节点,tot从n开始,++to ...
- 一个具有缓存数据功能的HttpWebRequest工具类
背景:一个公共站点中的数据,供其它子站点共享,为了提高性能,简单实现了Http 1.1的缓存功能 特点:可以缓存Html数据到内存中;缓存具有过期时间;缓存过期后,通过再确认的方式来决定是否更新缓存; ...
- 织梦dedecms搜索页加上序列号autoindex
在我们做织梦搜索页模板的时候经常会使用到autoindex标签.那么怎么才能实现搜索页可以使用呢?下面给大家分享下解决方法: 打开文件:include/arc.searchview.class.php ...