实操练习手册

实操练习手册

20 道 Java 练习题,覆盖 11 章的核心能力。每题给出解题思路、参考代码和预期输出,可以直接复制到 IDE 里跑。

20 道题基础/进阶/高阶每题可运行
怎么用① 先自己写,写不出来再看思路;② 代码复制到 IDE 里跑通;③ 输出与“预期输出”不一致就对比排查。

第1章 · 入门

01

编写程序输出你的姓名和年龄。 基础

解题思路用 System.out.println 直接输出;变量用 String 与 int。
查看参考代码与输出
JAVA
public class Ex01 {
    public static void main(String[] args) {
        String name = "张三";
        int age = 20;
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}
👀 预期输出
姓名:张三,年龄:20

第2章 · 语法基础

02

输入两个整数,输出它们的和、差、积、商。 基础

解题思路Scanner 读入两个 int,注意整数相除会丢小数,求商时转 double。
查看参考代码与输出
JAVA
import java.util.Scanner;

public class Ex02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt(), b = sc.nextInt();
        System.out.println("和 " + (a + b));
        System.out.println("差 " + (a - b));
        System.out.println("积 " + (a * b));
        System.out.println("商 " + ((double) a / b));
    }
}
👀 预期输出
输入 10 4 → 和 14 / 差 6 / 积 40 / 商 2.5
03

判断一个整数是奇数还是偶数。 基础

解题思路用取余 % 2 判断,结果为 0 是偶数。
查看参考代码与输出
JAVA
int n = 7;
System.out.println(n + (n % 2 == 0 ? " 是偶数" : " 是奇数"));
👀 预期输出
7 是奇数
04

求 1 到 100 的和。 基础

解题思路for 循环累加,或用等差数列公式。
查看参考代码与输出
JAVA
int sum = 0;
for (int i = 1; i <= 100; i++) sum += i;
System.out.println(sum);
👀 预期输出
5050
05

输出 1 到 100 之间所有能被 3 整除但不能被 5 整除的数。 进阶

解题思路for 遍历 + 两个条件用 && 与 != 组合。
查看参考代码与输出
JAVA
for (int i = 1; i <= 100; i++) {
    if (i % 3 == 0 && i % 5 != 0) System.out.print(i + " ");
}
👀 预期输出
3 6 9 12 18 21 24 27 33 36 39 42 48 51 54 57 63 66 69 72 78 81 84 87 93 96 99
06

求一个整型数组的最大值、最小值与平均值。 进阶

解题思路一次遍历同时维护 max/min/sum;平均值要转 double。
查看参考代码与输出
JAVA
int[] arr = {85, 92, 78, 60, 95};
int max = arr[0], min = arr[0], sum = 0;
for (int v : arr) {
    if (v > max) max = v;
    if (v < min) min = v;
    sum += v;
}
System.out.println("最大 " + max + ",最小 " + min + ",平均 " + (double) sum / arr.length);
👀 预期输出
最大 95,最小 60,平均 82.0
07

对一个数组冒泡排序(从小到大)。 进阶

解题思路两层循环,相邻比较交换;外层控制轮数,内层比较次数逐轮减少。
查看参考代码与输出
JAVA
int[] a = {5, 2, 9, 1, 7};
for (int i = 0; i < a.length - 1; i++)
    for (int j = 0; j < a.length - 1 - i; j++)
        if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; }
System.out.println(java.util.Arrays.toString(a));
👀 预期输出
[1, 2, 5, 7, 9]
08

写一个方法,判断一个数是否为素数。 进阶

解题思路从 2 试除到 sqrt(n),能整除就不是素数。
查看参考代码与输出
JAVA
static boolean isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return false;
    return true;
}
// 调用:System.out.println(isPrime(97));
👀 预期输出
true

第3章 · 面向对象(上)

09

定义学生类(姓名、年龄、成绩),创建对象并输出信息。 基础

解题思路私有属性 + 构造方法 + getter + toString。
查看参考代码与输出
JAVA
class Student {
    private String name; private int age; private double score;
    public Student(String n, int a, double s) { name = n; age = a; score = s; }
    public String toString() { return name + " " + age + " " + score; }
}
public class Ex09 {
    public static void main(String[] args) {
        System.out.println(new Student("张三", 20, 89.5));
    }
}
👀 预期输出
张三 20 89.5
10

统计一个类创建了多少个对象。 进阶

解题思路用 static 变量计数,在构造方法里自增。
查看参考代码与输出
JAVA
class Counter {
    static int count = 0;
    public Counter() { count++; }
}
new Counter(); new Counter(); new Counter();
System.out.println(Counter.count);
👀 预期输出
3

第4章 · 面向对象(下)

11

定义父类 Animal 与子类 Dog,重写 speak 方法并演示多态。 进阶

解题思路父类引用指向子类对象,调用时执行子类重写版本。
查看参考代码与输出
JAVA
class Animal { void speak() { System.out.println("动物叫"); } }
class Dog extends Animal { void speak() { System.out.println("汪汪"); } }
public class Ex11 {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.speak();
    }
}
👀 预期输出
汪汪
12

定义接口 Shape(求面积),实现 Circle 与 Rectangle 两个类。 进阶

解题思路接口定义规范,类用 implements 实现并各自计算面积。
查看参考代码与输出
JAVA
interface Shape { double area(); }
class Circle implements Shape {
    double r;
    Circle(double r) { this.r = r; }
    public double area() { return Math.PI * r * r; }
}
class Rect implements Shape {
    double w, h;
    Rect(double w, double h) { this.w = w; this.h = h; }
    public double area() { return w * h; }
}
👀 预期输出
Circle(2) = 12.566;Rect(3,4) = 12.0
13

写一个方法做除法,除数为 0 时抛出自定义异常。 进阶

解题思路throw new RuntimeException(...),调用方 try-catch 处理。
查看参考代码与输出
JAVA
static int divide(int a, int b) {
    if (b == 0) throw new RuntimeException("除数不能为 0");
    return a / b;
}
try { divide(10, 0); } catch (RuntimeException e) { System.out.println(e.getMessage()); }
👀 预期输出
除数不能为 0

第5章 · 常用类

14

把一个字符串反转输出。 基础

解题思路StringBuilder 的 reverse() 最简单,也可以用 charAt 倒序拼。
查看参考代码与输出
JAVA
String s = "hello";
System.out.println(new StringBuilder(s).reverse());
👀 预期输出
olleh
15

统计字符串里大写字母、小写字母、数字的个数。 基础

解题思路遍历 char,用 Character.isUpperCase/isLowerCase/isDigit 判断。
查看参考代码与输出
JAVA
String s = "Java2024Class";
int up = 0, low = 0, num = 0;
for (char c : s.toCharArray()) {
    if (Character.isUpperCase(c)) up++;
    else if (Character.isLowerCase(c)) low++;
    else if (Character.isDigit(c)) num++;
}
System.out.println("大写 " + up + " 小写 " + low + " 数字 " + num);
👀 预期输出
大写 2 小写 8 数字 4
16

把日期字符串 "2025-07-01" 解析成日期并格式化为「2025年07月01日」。 进阶

解题思路SimpleDateFormat 的 parse 与 format 互逆。
查看参考代码与输出
JAVA
java.text.SimpleDateFormat in = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.text.SimpleDateFormat out = new java.text.SimpleDateFormat("yyyy年MM月dd日");
System.out.println(out.format(in.parse("2025-07-01")));
👀 预期输出
2025年07月01日

第6章 · 集合

17

用 ArrayList 存 5 个学生的成绩,求平均分并删除低于 60 的。 进阶

解题思路先求和求平均;删除用 removeIf 或倒序删除避免下标错乱。
查看参考代码与输出
JAVA
java.util.List<Integer> list = new java.util.ArrayList<>(java.util.Arrays.asList(85, 92, 58, 60, 77));
int sum = 0; for (int v : list) sum += v;
System.out.println("平均 " + (double) sum / list.size());
list.removeIf(v -> v < 60);
System.out.println(list);
👀 预期输出
平均 74.4
[85, 92, 60, 77]
18

用 HashMap 统计一句话中每个单词出现的次数。 高阶

解题思路split 分词;getOrDefault 累加;entrySet 遍历输出。
查看参考代码与输出
JAVA
String s = "java is easy java is fun";
java.util.Map<String, Integer> map = new java.util.HashMap<>();
for (String w : s.split(" "))
    map.put(w, map.getOrDefault(w, 0) + 1);
System.out.println(map);
👀 预期输出
{java=2, is=2, easy=1, fun=1}

第7章 · IO流

19

把一个文本文件的内容复制到另一个文件。 高阶

解题思路用 BufferedReader/BufferedWriter 按行读写,try-with-resources 自动关流。
查看参考代码与输出
JAVA
try (java.io.BufferedReader br = new java.io.BufferedReader(new java.io.FileReader("in.txt"));
     java.io.BufferedWriter bw = new java.io.BufferedWriter(new java.io.FileWriter("out.txt"))) {
    String line;
    while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); }
    System.out.println("复制完成");
} catch (java.io.IOException e) { e.printStackTrace(); }
👀 预期输出
复制完成

第9章 · JDBC

20

用 JDBC 查询学生表并打印所有姓名。 高阶

解题思路加载驱动 → 建连接 → PreparedStatement → 执行 → 遍历 ResultSet → 关闭资源。
查看参考代码与输出
JAVA
Class.forName("com.mysql.cj.jdbc.Driver");
try (java.sql.Connection conn = java.sql.DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/软件4班?useSSL=false&serverTimezone=UTC", "root", "123456");
     java.sql.PreparedStatement ps = conn.prepareStatement("select 姓名 from 学生表");
     java.sql.ResultSet rs = ps.executeQuery()) {
    while (rs.next()) System.out.println(rs.getString("姓名"));
}
👀 预期输出
张三
李四
王五

练完之后