×

案例一:猜数字游戏(综合运用)

先来一个经典的练手项目——猜数字。让你猜 1~100 之间的随机数,每次告诉你是大了还是小了,猜中为止并统计次数:

import java.util.Random;
import java.util.Scanner;

public class GuessNumber {
    public static void main(String[] args) {
        // 1. 生成 1~100 的随机数
        Random random = new Random();
        int target = random.nextInt(100) + 1;  // nextInt(100) 返回 0~99,+1 变成 1~100
        
        // 2. 准备键盘输入和计数
        Scanner sc = new Scanner(System.in);
        int guess;
        int count = 0;
        
        System.out.println("====== 猜数字 ======");
        System.out.println("我心里想了一个 1~100 之间的数,你来猜猜看");
        
        // 3. 循环猜,直到猜对
        do {
            System.out.print("请输入你的猜测:");
            guess = sc.nextInt();
            count++;
            
            if (guess < target) {
                System.out.println("小了,再大点!");
            } else if (guess > target) {
                System.out.println("大了,再小点!");
            } else {
                System.out.println("恭喜你,猜对了!");
                System.out.println("你一共猜了 " + count + " 次");
            }
        } while (guess != target);
        
        sc.close();
    }
}

这个例子覆盖了哪些知识点?

别看这个程序简单,猜数字的骨架可以扩展到猜单词、猜商品价格、抽奖系统……把 target 换成单词数组或价格区间就行。这就是”案例驱动”的魅力——练一个顶十个。

案例二:简易计算器(运算符综合)

用 switch 做一个支持加减乘除的简易计算器:

import java.util.Scanner;

public class SimpleCalculator {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("请输入第一个数字:");
        double num1 = sc.nextDouble();
        
        System.out.print("请输入运算符(+ - * /):");
        String operator = sc.next();
        
        System.out.print("请输入第二个数字:");
        double num2 = sc.nextDouble();
        
        double result;
        boolean valid = true;
        
        switch (operator) {
            case "+":
                result = num1 + num2;
                break;
            case "-":
                result = num1 - num2;
                break;
            case "*":
                result = num1 * num2;
                break;
            case "/":
                if (num2 == 0) {
                    System.out.println("除数不能为 0!");
                    valid = false;
                    result = 0;
                } else {
                    result = num1 / num2;
                }
                break;
            default:
                System.out.println("不支持的运算符:" + operator);
                valid = false;
                result = 0;
        }
        
        if (valid) {
            System.out.println(num1 + " " + operator + " " + num2 + " = " + result);
        }
        
        sc.close();
    }
}

这个例子的知识点

加个小改造:把循环套在外面,让用户能一直计算,直到输入 q 退出。试试自己动手改一改。

案例三:打印九九乘法表(循环嵌套)

这是几乎所有编程语言入门的”基本功”——用两层 for 循环打印乘法表:

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {          // 外层循环:行
            for (int j = 1; j <= i; j++) {      // 内层循环:列
                System.out.print(j + "×" + i + "=" + (i * j) + "t");
            }
            System.out.println();  // 换行
        }
    }
}

输出效果:

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

关键理解

自己试试:如果把内层条件改成 j <= 9 会怎样?改成 j <= 9 - i + 1 呢?

案例四:判断质数(分支 + 循环配合)

判断一个数是不是质数(只能被 1 和自身整除):

import java.util.Scanner;

public class PrimeChecker {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("请输入一个正整数:");
        int num = sc.nextInt();
        
        if (num <= 1) {
            System.out.println(num + " 不是质数");
        } else {
            boolean isPrime = true;
            
            // 从 2 检查到 num 的平方根就行(优化点)
            for (int i = 2; i * i <= num; i++) {
                if (num % i == 0) {
                    isPrime = false;
                    break;  // 找到因数就退出循环
                }
            }
            
            if (isPrime) {
                System.out.println(num + " 是质数");
            } else {
                System.out.println(num + " 不是质数");
            }
        }
        
        sc.close();
    }
}

值得注意的优化

用上一篇学的 break + 取模运算符 % 实现了一个很实用的判断工具。学语法的时候觉得”就这?”,真用起来才知道都是宝贝。

案例五:打印菱形图案(多重循环艺术)

这个案例看起来花哨,但实际就是在「空格和星号」之间做好数量控制:

import java.util.Scanner;

public class DiamondPattern {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("请输入菱形的行数(奇数):");
        int rows = sc.nextInt();
        
        // 上半部分(含中间行)
        int half = rows / 2 + 1;
        for (int i = 1; i <= half; i++) {
            // 打印前面的空格
            for (int j = 1; j <= half - i; j++) {
                System.out.print("  ");
            }
            // 打印星号
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("* ");
            }
            System.out.println();
        }
        
        // 下半部分
        for (int i = half - 1; i >= 1; i--) {
            // 打印前面的空格
            for (int j = 1; j <= half - i; j++) {
                System.out.print("  ");
            }
            // 打印星号
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("* ");
            }
            System.out.println();
        }
        
        sc.close();
    }
}

输入 7 的输出效果:

      * 
    * * * 
  * * * * * 
* * * * * * * 
  * * * * * 
    * * * 
      * 

核心逻辑:上半部分每行有 2*i-1 个星号(i 从 1 开始),空格数 = half – i。下半部分反过来。掌握了这个规律,打印任何对称图形都不在话下。

小结与反思

这 5 个案例,用到的知识点全部来自前四篇:

案例用到的知识点
猜数字Random、Scanner、if-else、do-while、比较运算符
简易计算器switch、算术运算符、nextDouble、布尔状态标记
乘法表for 嵌套、t 制表符、循环边界控制
判断质数break、取模 %、平方根优化、for + if 配合
菱形图案多重 for 循环、空格与星号计数

学完了运算符、分支、循环,你已经能写出像模像样的交互程序了。别小看这些基础,它们是真真实实每天写代码都在用的东西。

下一步,我们要正式迈入 Java 真正的精华——面向对象编程。类与对象、构造方法、this 关键字、封装、继承、多态……这些概念听起来高大上,但等你敲出来第一个自己的对象,你会发现——原来代码还可以这么写。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

作者

2248768396@qq.com

相关文章

03. 运算符与进制详解

上篇我们把 8 种基本数据类型和变量声明搞清...

读出全部