Java流程控制練習--萬年曆

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 求解思路

image_1cjdnelko131u1850ce31nvq1rc9m.png-45.4kB

例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月。markdown

  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便可;

image_1cjdo2mjl181e1g141mfmpnt1s8q13.png-67.3kB

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    
********感謝您使用萬年曆!********

image_1cjljg6iv145ufgu35miqb1ntp9.png-29.9kB

emmmm...格式是對的,可是一複製到markdown就會錯位....3d

相關文章
相關標籤/搜索