【日擼 Java 三百行】Day 4(條件語句實戰——閏年問題)

目錄

Day 4:條件語句實戰——閏年問題

一、基礎知識及代碼思路

二、代碼及測試

小結


Day 4:條件語句實戰——閏年問題

Task:

  • if 語句的嵌套.
  • 基本規律自行百度.
  • 布爾類型.

一、基礎知識及代碼思路

1. 什么是閏年?

????????閏年是歷法中的名詞,分為普通閏年和世紀閏年。
????????閏年(Leap Year)是為了彌補因人為歷法規定造成的年度天數與地球實際公轉周期的時間差而設立的。補上時間差的年份為閏年。——來自百度百科
????????普通閏年:公歷年份是4的倍數,且不是100的倍數的,為閏年
????????世紀閏年:公歷年份是整百數的,必須是400的倍數才是閏年(

? ? ? ? 故根據定義,將判斷要點轉化為計算機語言為:

(i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)

2. 邏輯判斷——針對定義

? ? ? ? 從定義上來講,其實只需要一個判斷即可,即以下值為 true 還是 false:

if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))

3. 邏輯判斷——針對 if-else 分析

? ? ? ? 所有程序在碼碼前,都應該在大腦內建立一個初步的邏輯判斷流程圖。
? ? ? ? 在 if-else 語句中,尤其需要注意判斷的包含關系:即應該先判斷較為寬松的條件,后判斷較為嚴格的條件。梳理思路,可以得到如下流程圖:

? ? ? ? 當然,如果存在梳理困難的情況,我們可以借助韋恩圖來幫助我們判斷包含關系

????????首先可以對于年份被4整除進行排除,如果年份無法被4整除,那么直接可以判斷不是閏年(圖中淺天藍色外圍)。若被4整除了,我們討論的范圍就進入的4倍數的區域,這個區域內要額外考慮100倍數問題(進入淺黃色區域)。
????????這里的else if語句不能直接用“余100”判斷,因為“余100”直接會包含的淺黃色及其內的肉色全部區域,這樣無法分離出內部的“400倍數”。
????????因此必須額外判斷年份是否被400整除,若可以(進入最內部的肉色區域),就是閏年。
????????所以,真正好的if-else if-else語句要正確包含韋恩圖最大的范圍與最小的范圍,并且從if到else過程可以映射為韋恩圖的從最大區域到最小區域的過程。

二、代碼及測試

? ? ? ? 需要說明的是,為了培養良好的代碼結構以及代碼習慣,我們這里依舊將判斷封裝為一個函數,即:

    /************************ Is the given year leap?* * @param paraYear The given year.**********************/public static boolean isLeapYear(int paraYear) {if ((paraYear % 4 == 0) && (paraYear % 100 != 0) || (paraYear % 400 == 0)) {return true;} else {return false;} // Of if}// Of isLeapYear/************************ Is the given year leap? Replace the complex condition with a number of if.* * @param paraYear The given year.**********************/public static boolean isLeapYearV2(int paraYear) {if (paraYear % 4 != 0) {return false;} else if (paraYear % 400 == 0) {return true;} else if (paraYear % 100 == 0) {return false;} else {return true;} // Of if}// Of isLeapYearV2

? ? ? ? 整體代碼如下:

package basic;/*** The usage of sth.** @author: Changyang Hu joe03@foxmail.com* @date created: 2025-05-06*/
public class isLeapYear {/************************ The entrance of the program.* * @param args Not used now.**********************/public static void main(String args[]) {// Test isLeapYearint tempYear = 2021;System.out.print("" + tempYear + " is ");if (!isLeapYear(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");tempYear = 2000;System.out.print("" + tempYear + " is ");if (!isLeapYear(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");tempYear = 2100;System.out.print("" + tempYear + " is ");if (!isLeapYear(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");tempYear = 2004;System.out.print("" + tempYear + " is ");if (!isLeapYear(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");// Test isLeapYearV2System.out.println("Now use the second version.");tempYear = 2021;System.out.print("" + tempYear + " is ");if (!isLeapYearV2(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");tempYear = 2000;System.out.print("" + tempYear + " is ");if (!isLeapYearV2(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");tempYear = 2100;System.out.print("" + tempYear + " is ");if (!isLeapYearV2(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");tempYear = 2004;System.out.print("" + tempYear + " is ");if (!isLeapYearV2(tempYear)) {System.out.print("NOT ");} // Of ifSystem.out.println("a leap year.");}// Of main/************************ Is the given year leap?* * @param paraYear The given year.**********************/public static boolean isLeapYear(int paraYear) {if ((paraYear % 4 == 0) && (paraYear % 100 != 0) || (paraYear % 400 == 0)) {return true;} else {return false;} // Of if}// Of isLeapYear/************************ Is the given year leap? Replace the complex condition with a number of if.* * @param paraYear The given year.**********************/public static boolean isLeapYearV2(int paraYear) {if (paraYear % 4 != 0) {return false;} else if (paraYear % 400 == 0) {return true;} else if (paraYear % 100 == 0) {return false;} else {return true;} // Of if}// Of isLeapYearV2}// Of class LeapYear

? ? ? ? 運行結果如下:


小結

????????閏年計算是計算機語言關于條件語句與邏輯學習的典型案例,從中無論是初學者還是后來學習的人都應當深深體會程序語言邏輯的合理性已經對于問題的基本抽象。

????????雖然這是個非常基礎的計算機問題,但是以小見大,其中對于問題的抽象能力以及建立正確判斷邏輯的能力是貫通始終的。從最簡單的練習開始打牢基礎,才能在之后的學習生涯中游刃有余的處理更加復雜的問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79869.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 中 EXISTS (SELECT 1 FROM ...) 的用法詳解

EXISTS (SELECT 1 FROM ...) 是 MySQL 中用于存在性檢查的核心語法,其核心邏輯是判斷子查詢是否返回至少一行數據。以下從作用原理、使用場景、性能優化等方面展開解析,并結合具體示例說明。 1. 基本語法與作用原理 語法結構: SELECT 列名 F…

阿里云服務器防御是怎么做出來的?服務器攻擊方式有幾種?

阿里云服務器防御是怎么做出來的?服務器攻擊方式有幾種? 服務器防御是一個多層次、多維度的體系,通常包括以下核心措施: 1. 網絡層防御 防火墻(Firewall):過濾非法流量,僅允許授權通信&#xf…

ElasticSearch深入解析(八):索引設置、索引別名、索引模板

一、索引的動態設置、靜態設置 索引設置包含兩部分核心內容: 靜態設置(static index settings),只允許在創建索引時或者針對已關閉的索引進行設置。指動態設置(dynamic index settings),可以借助更新設置(update settings)的方式進行動態更新…

Prometheus實戰教程:k8s平臺手動部署Grafana

以下是一個可用于生產環境的 Kubernetes 部署 Grafana 的 YAML 文件。該配置包括 Deployment、Service、ConfigMap 和 PersistentVolumeClaim,確保 Grafana 的高可用性和數據持久化。 Grafana 生產部署 YAML 文件 ☆實操示例 cat grafana-deployment.yaml 登錄后復制…

VSTO外接程序與VBA的聯動嘗試

文章目錄 前言一、第一坑:安裝offic2007后excel加載項找不到了二、示例1 通過Ribbon XML自定義Excel主菜單并添加新項二、示例1 總結三、示例2 創建VSTO外接程序三、示例2 總結四、示例 3 C# VSTO外接程序示例四、示例 3 總結五、實現C# 的VSTO調用VBA函數(xlam)六、…

DeepSeek驅動的金市情緒量化:NLP解析貿易政策文本的情緒傳導路徑

【AI觀察】政策信號與市場情緒的量化關聯 基于自然語言處理技術對全球財經文本的情緒分析顯示,4月30日亞盤時段現貨黃金價格波動率較前日下降12.3%,與技術面修正指標呈現強相關性。特政府最新關稅政策調整引發市場風險偏好指數(RPI&#xff…

期末代碼Python

以下是 學生信息管理系統 的簡化版代碼示例(控制臺版本,使用文件存儲數據),包含核心功能: 1. 定義學生類 class Student: def __init__(self, sid, name, score): self.sid sid # 學號 self.name name # 姓名 self.s…

zotero pdf中英翻譯插件使用

最近發現一個pdf中英翻譯的神器zotero-pdf2zh,按照官方安裝教程走一遍的時候,發現一些流程不清楚的問題, 此文就是整理一些安裝需要的文件以及遇到的問題: 相關文件下載地址 Zotero 是一款免費的、開源的文獻管理工具&#xff0…

本地MySQL連接hive

1、首先需要修改MySQL的配置,允許遠程連接: # 在本地MySQL服務器上執行 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf找到 bind-address 行,將其修改為: bind-address 0.0.0.02、在本地MySQL中創建用戶并授權(注意…

Nginx核心功能2

一:正向代理 正向代理(Forward Proxy)是一種位于客戶端和原始服務器之間的代理服務器,其主要作用是將客戶端的請求轉發給目標服務器,并將響應返回給客戶端Nginx的正向代理充當客戶端的“中間人”,代表用戶訪問外部資源…

高定電視,一場關于生活方式的覺醒

需要有自己的工作室,雇用3個以上專職模特,至少15名全職員工和20名技術工匠?; 每年都要參加巴黎高級時裝周,展示至少50款原創設計; 使用的面料必須高質量、昂貴且不同尋常,設計上注重細節和個性&#x…

用PyTorch搭建卷積神經網絡實現MNIST手寫數字識別

用PyTorch搭建卷積神經網絡實現MNIST手寫數字識別 在深度學習領域,卷積神經網絡(Convolutional Neural Network,簡稱CNN)是處理圖像數據的強大工具。它通過卷積層、池化層和全連接層等組件,自動提取圖像特征&#xff…

Tensorrt 基礎入門

什么是tensorrt? 其他廠商: Qualcomm, Hailo, google TPU tensorrt的優劣勢 使用tensorrt的pipeline tensorrt使用中存在的問題以及解決方案 tensorrt的應用場景 自動駕駛模型部署需要關注的問題: 邊端硬件資源有限 散熱(不能水冷) 實時性&…

Qt 顯示QRegExp 和 QtXml 不存在問題

QRegExp 和 QtXml 問題 在Qt6 中 已被棄用; 1)QRegExp 已被棄用,改用 QRegularExpression Qt5 → Qt6 重大變更:QRegExp 被移到了 Qt5Compat 模塊,默認不在 Qt6 核心模塊中。 錯誤類型解決方法QRegExp 找不到改用 Q…

玩玩OCR

一、Tesseract: 1.下載windows版: tesseract 2. 安裝并記下路徑,等會要填 3.保存.py文件 import pytesseract from PIL import Image def ocr_local_image(image_path):try:pytesseract.pytesseract.tesseract_cmd rD:\Programs\Tesseract-OCR\tesse…

Dify 完全指南(一):從零搭建開源大模型應用平臺(Ollama/VLLM本地模型接入實戰)》

文章目錄 1. 相關資源2. 核心特性3. 安裝與使用(Docker Compose 部署)3.1 部署Dify3.2 更新Dify3.3 重啟Dify3.4 訪問Dify 4. 接入本地模型4.1 接入 Ollama 本地模型4.1.1 步驟4.1.2 常見問題 4.2 接入 Vllm 本地模型 5. 進階應用場景6. 總結 1. 相關資源…

C++ Windows 打包exe運行方案(cmake)

文章目錄 背景動態庫梳理打包方案一、使用 Vcpkg 安裝靜態庫(關鍵基礎配置)1. 初始化 Vcpkg2. 安裝靜態庫(注意 x64-windows-static 后綴) 二、CMakeLists.txt 關鍵配置三、編譯四、驗證 不同平臺代碼兼容\_\_attribute\_\_((pack…

Java學習手冊:Hibernate/JPA 使用指南

一、Hibernate 和 JPA 的核心概念 實體(Entity) :實體是 JPA 中用于表示數據庫表的 Java 對象。通過在實體類上添加 Entity 注解,JPA 可以將實體類映射到數據庫表。例如,定義一個 User 實體類: import ja…

字符串匹配 之 拓展 KMP算法(Z算法)

文章目錄 習題2223.構造字符串的總得分和3031.將單詞恢復初始狀態所需的最短時間 II 靈神代碼模版 區別與KMP算法 KMP算法可用于求解在線性時間復雜度0(n)內求解模式串p在主串s中匹配的未知當然,由于在KMP算法中,預處理求解出了next數組,也就…

安全為上,在系統威脅建模中使用量化分析

*注:Open FAIR? 知識體系是一種開放和獨立的信息風險分析方法。它為理解、分析和度量信息風險提供了分類和方法。Open FAIR作為領先的風險分析方法論,已得到越來越多的大型組織認可。 在數字化風險與日俱增的今天,企業安全決策正面臨雙重挑戰…