1982 字
10 分钟
Java从入门到“放弃”(精通)之旅——程序逻辑控制④
2024-04-15
浏览量:加载中...访问次数:加载中...

Java从入门到“放弃”(精通)之旅🚀:程序逻辑的完美理解#

在这里插入图片描述

一、开篇:程序员的”人生选择”#

曾经的我,生活就像一段顺序执行的代码:

System.out.println("早上8:00起床");
System.out.println("洗漱");
System.out.println("吃早饭");
// ... 重复枯燥的生活

直到某天,我的代码里加入了分支结构

if(不好好学习){
System.out.println("可能要卖红薯🍠");
}else{
System.out.println("好好学习,走上人生巅峰💪");
}

从此,我的生活变成了充满循环的奋斗史:

while(活着){
学习();
敲代码();
刷题();
if(竞赛拿奖){
Score++;
}
}

二、顺序结构:代码界的”直男”#

在这里插入图片描述

顺序结构就像直男的思维——简单直接,一步一个脚印:

System.out.println("第一步:起床");
System.out.println("第二步:打开IDE");
System.out.println("第三步:假装自己在学习");

⚠️ 警告:千万别把第三步放到第一步前面,除非你想体验”梦中编程”的快乐。

三、分支结构:程序员的”选择困难症”#

在这里插入图片描述

1. if语句:人生处处是选择#

if(熬夜时间 == 0){
System.out.println("养生学霸型:早睡早起,成绩优异");
}else if(熬夜时间 <= 2){
System.out.println("普通学生型:偶尔熬夜,生活规律");
}else if(熬夜时间 <= 4){
System.out.println("期末冲刺型:咖啡续命,笔记飞起");
}else if(熬夜时间 <= 6){
System.out.println("DDL战士型:生死时速,键盘冒烟");
}else{
System.out.println("修仙大佬型:见过凌晨四点的校园吗?天天见!");
}

2. switch语句:多选项的烦恼#

switch(减压方式){
case "写代码":
System.out.println("这算减压?");
break;
case "改bug":
System.out.println("这明明是增压!");
break;
default:
System.out.println("还是熬夜吧");
}

🎓 冷知识:switch不支持long类型,就像程序员不支持长时间不写代码一样

四、循环结构:程序员的”复读机模式”#

在这里插入图片描述

1. while循环:bug改不完的绝望#

while(bug存在){
System.out.println("我再改最后一个bug");
// 此处应有break,但程序员总是忘记
}

2. for循环:优雅的计数君#

for(int i=1; i<=熬夜天数; i++){
System.out.println("第" + i + "天熬夜复习");
if(i == 3){
System.out.println("⚠️ 警告:黑眼圈已形成");
}
else if(i == 5){
System.out.println("⚠️⚠️ 严重警告:开始靠咖啡续命");
}
else if(i == 7){
System.out.println("💀 系统提示:您的健康值即将耗尽");
}
if(熬夜天数 >= 10){
System.out.println("🎓 成就解锁:获得『考试周生存专家』称号!");
break;
}
}

3. do-while循环:至少执行一次的倔强#

do{
System.out.println("我保证这是最后一次熬夜");
}while(咖啡因还起作用);

五、控制语句:程序员的”后悔药”#

1. break:及时止损#

while(上课中){
if(老师突然点名提问){
System.out.println("【系统警报】检测到危险信号!");
System.out.println("执行紧急预案:");
System.out.println("1. 低头假装记笔记");
System.out.println("2. 眼神躲避术启动");
System.out.println("3. 默念'不要点我'");
break; // 终止当前危机
}
}

2. continue:选择性失忆#

for(一天中的时间){
if(是睡觉时间){
continue; // 跳过睡觉,继续coding
}
写代码();
}

六、实战演练:猜数字游戏 🎮#

import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Random random = new Random();
Scanner sc = new Scanner(System.in);
int target = random.nextInt(100) + 1; // 1-100的随机数
System.out.println("欢迎来到猜数字游戏!(开发者已偷偷把答案设为:" + target + ")");
while(true){
System.out.println("请输入你的猜测(1-100):");
int guess = sc.nextInt();
if(guess < target){
System.out.println("猜小了,再大胆点!");
}else if(guess > target){
System.out.println("猜大了,收着点!");
}else{
System.out.println("恭喜你猜对了!奖励一朵小红花🌸");
break;
}
}
sc.close();
}
}

💡 彩蛋:把注释掉的System.out.println("toGuess: " + toGuess);取消注释,你就是游戏界的”内部人员”了!

七、练习题:程序员的”脑力激荡”#

  1. 年龄分段器:输入年龄自动输出你是少年/青年/中年/老年(温馨提示:慎测程> 序员年龄)
import java.util.Scanner;
public class AgeClassifier {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入你的年龄:");
int age = scanner.nextInt();
if (age < 0) {
System.out.println("年龄不能为负数!");
} else if (age <= 18) {
System.out.println("少年:青春无敌,好好学习!");
} else if (age <= 28) {
System.out.println("青年:奋斗的黄金时期,加油!");
} else if (age <= 55) {
System.out.println("中年:家庭事业双丰收的阶段");
} else {
System.out.println("老年:享受生活,保持健康");
}
scanner.close();
}
}
  1. 素数鉴定师:判断一个数是否为素数(数学老师看了都点赞)
import java.util.Scanner;
public class PrimeChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int num = scanner.nextInt();
if (num <= 1) {
System.out.println(num + " 不是素数");
return;
}
boolean isPrime = true;
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(num + " 是素数");
} else {
System.out.println(num + " 不是素数");
}
scanner.close();
}
}
  1. 闰年探测器:找出1000-2000年所有闰年(历史学家都说好)
在这里插入代码片public class LeapYearFinder {
public static void main(String[] args) {
System.out.println("1000-2000年之间的闰年有:");
int count = 0;
for (int year = 1000; year <= 2000; year++) {
if (isLeapYear(year)) {
System.out.print(year + " ");
count++;
if (count % 10 == 0) { // 每10个换一行
System.out.println();
}
}
}
System.out.println("\n共计:" + count + "个闰年");
}
// 判断闰年的方法
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
  1. 水仙花数:找出所有水仙花数(比真花还难找的数字)
public class NarcissisticNumber {
public static void main(String[] args) {
System.out.println("所有的三位数水仙花数:");
for (int num = 100; num < 1000; num++) {
int hundreds = num / 100;
int tens = (num / 10) % 10;
int units = num % 10;
// 计算各位数字的立方和
int sum = (int)(Math.pow(hundreds, 3) +
(int)(Math.pow(tens, 3)) +
(int)(Math.pow(units, 3));
if (sum == num) {
System.out.println(num + " 是水仙花数");
System.out.println("验证:" + hundreds + "³ + " + tens + "³ + " + units + "³ = " + sum);
}
}
}
}
  1. 二进制解剖:分析数字的二进制表示(让你看清数字的”本质”)
import java.util.Scanner;
public class BinaryAnalyzer {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("原始数字:" + num);
System.out.println("二进制表示:" + Integer.toBinaryString(num));
// 计算1的个数
int count = Integer.bitCount(num);
System.out.println("二进制中1的个数:" + count);
// 输出奇数位和偶数位
System.out.print("奇数位(从右往左数,第一位为1):");
for (int i = 31; i >= 0; i--) {
if (i % 2 == 0) { // 奇数位(因为从0开始计数)
System.out.print((num >> i) & 1);
}
}
System.out.print("\n偶数位:");
for (int i = 31; i >= 0; i--) {
if (i % 2 == 1) { // 偶数位
System.out.print((num >> i) & 1);
}
}
scanner.close();
}
}

八、关于一些格式化字符串#

在这里插入图片描述

九、结语:代码如人生#

记住,编程就像人生:

  • 顺序执行是基础
  • 分支选择决定方向
  • 循环坚持才能成功
  • 偶尔break是为了更好的continue

🔑🔑🔑

while(活着){
学习();
进步();
if(遇到bug){
解决它();
}else{
制造bug(); // 这样才能进步
}
}

JavaSE专栏(CSDN)

Java从入门到“放弃”(精通)之旅——程序逻辑控制④
https://mizuki.mysql.com/posts/java/contentd/
作者
Overthinker
发布于
2024-04-15
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00