Loading...

文章背景图

习题留存集

2026-01-25
28
-
- 分钟

一、选择题

1.多选题:以下关于环境变量的描述正确的有哪些?

A. 在系统环境变量中正确配置JAVA安装路径到path环境变量,就可以在命令行窗口使用java命令了

B. 在命令行窗口输入的命令会先到当前目录查找,再到Path环境变量下查找

C. 系统环境变量可以被任意程序读取到

D. 在环境变量中配置好JAVA_HOME后,就可以在命令行窗口执行java命令了

正确答案:BC

2.多选题:下面满足驼峰命名规则的标识符有哪些?

A. updateTime

B. Helloworld

C. czjy

D. HelloWorld

正确答案:AD

3.多选题:下面说法正确的是?

A. 布尔值中只能定义true或者false

B. 字符中有且只能定义一个字符

C. 空值使用null表示

D. 字符串中可以定义任意的内容

正确答案:ABCD

4.多选题:下面哪些是属于Java中的关键字?

A. class

B. String

C. void

D. public

正确答案:ACD

5.多选题:下面哪些是属于标识符的要求?

A. 严格区分大小写

B. 不能是关键字

C. 不能以数字开头

D. 一定要有字母组成

正确答案:ABC

6.单选题:下面关于变量和数组的介绍,说法错误的是?

A. 一个变量只能存放一个数据

B. 遇到批量数据的存储和操作时,使用使用数组

C. 数组可以存放同种类型的多个值

D. 有了变量,就可以不用数组了

正确答案:D

7.单选题:静态初始化数组时,若元素个数超过指定长度,会()?

A. 运行时报错

B. 没有影响

C. 编译报错

D. 自动截断

正确答案:A

8.多选题:下面关于数组动态初始化描述正确的是?

A. 数组动态初始化的时候需要确定数组存储的类型

B. 定义数组时先不存入具体的元素值

C. 数组动态初始化的时候需要确定数组的长度

D. 以上说法都是错误的

正确答案:ABC

9.单选题:于动态初始化数组后元素的默认值说法错误的是?

A. 小数默认赋值为0.0

B. 引用数据类型默认赋值为null

C. boolean类型默认赋值为true

D. 整数默认赋值为0

正确答案:C

boolean 类型的正确默认值是 false

10.多选题:对于静态初始化的数组,以下说法正确的是?

A. 可以直接指定数组的元素

B. 不需要指定数组长度

C. 不需要指定类型

D. 元素值可以在初始化时任意指定,只要类型统一并且正确即可

正确答案:ABD

11.单选题:下面数组静态初始化正确的是?

A. int arr; arr = new double[]{1.1, 2.2};

B. int arr = new int[]{1.1, 2.2};

C. int[] arr = new int[3]{1, 2. 3};

D. int[] arr = {1, 2, 3, 4};

正确答案:D

12.多选题:静态初始化数组时,元素值可以是?

A. 常量

B. 以上都可以

C. 表达式的值

D. 变量

正确答案:ABCD

二、编码题

1.创建一个Java程序,在程序中分别输出整数10,小数5.333,字符10,字符串小明,布尔值true以及空常量null。如果程序中出错,请把错误的代码注释掉

程序执行,在控制台输出效果

public class demo4 {
    public static void main(String[] args) {
        System.out.println(10);
        System.out.println(5.333);
        // System.out.println('10');
        System.out.println("小明");
        System.out.println(true);
        // System.out.println(null);
    }
}

2.在电脑上创建一个文本文档(注意,不要使用IDEA)。创建一个Java程序,添加main方法,使用输出语句打印出如下的效果

程序执行,在控制台输出效果

{@}
/|\
 |
  1. 知识点

  • Java程序的开发流程【创建Java程序,编写Java程序,编译写好的Java程序,运行生成的class文件】

  • System.out.println();输出语句,程序可以把括号中的内容输出在控制台

  • "\"的特殊意义。如果在字符串中要表示一个 "\" ,就需要写成 "\\"

  1. 思路分析

1.创建一个文本文档,重命名,Test02.java。
2.编写代码
3.ctrl + s ,保存编写好的内容
4.打开命令行提示符窗口,编译已经写好的Java程序。格式 javac Test02.java。
5.编译之后,得到一个Test02.class文件。运行,得到的class文件。格式 java Test02   
  1. 答案

public class Test02{
    public static void main(String[] args){
        System.out.println("{@}");
        System.out.println("/|\\");
        System.out.println(" |");

    }
}

3.键盘录入年份,判断是否是闰年。闰年规则:能被4整除但不能被100整除,或能被400整除的年份。

package com.homework;

import java.util.Scanner;

/**
 * @Description Demo5
 * 键盘录入年份,判断是否是闰年。闰年规则:能被4整除但不能被100整除,或能被400整除的年份。
 * @Author liqingchuan
 * @Date 2026-01-26
 */
public class Demo5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份,将判断是否为闰年:");
        int year = sc.nextInt();
        System.out.println(((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)?"是闰年":"不是闰年");
    }
}

4.创建一个程序,让用户输入一个以秒为单位的时间大小,并将其转换为小时、分钟和秒的形式输出。

package com.homework;

import java.util.Scanner;

/**
 * @Description Demo6
 * 创建一个程序,让用户输入一个以秒为单位的时间大小,并将其转换为小时、分钟和秒的形式输出。
 * @Author liqingchuan
 * @Date 2026-01-26
 */
public class Demo6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入秒数:");
        int time = sc.nextInt();
        int hour = time / 3600;
        int minute = time / 60 % 60;
        int second = time % 60;
        System.out.println("当前时间为:" + hour + "时" + minute + "分" + second + "秒");
    }
}

5.BMI(Body Mass Index,身体质量指数)是用来评估体重是否适宜的一个常用指标。

package com.homework;

import java.util.Scanner;

/**
 * @Description Demo7
 * BMI(Body Mass Index,身体质量指数)是用来评估体重是否适宜的一个常用指标。
 * 它通过体重(以千克为单位)除以身高(以米为单位)的平方来计算。BMI的正常范围通常定义为18.5到24.9(kg/m²)。具体来说:
 * - BMI小于18.5被认为是体重过低;
 * - BMI在18.5到25(不包括)之间被认为是正常范围;
 * - BMI在25到30(不包括)之间被认为是超重;
 * - BMI在30及以上被认为是肥胖。
 * 请键盘录入人的体重和身高,计算并输出他的体重是过低、正常、超重还是肥胖。
 * @Author liqingchuan
 * @Date 2026-01-26
 */
public class Demo7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入身高(米):");
        double height = sc.nextDouble();
        System.out.println("请输入体重(千克):");
        double weight = sc.nextDouble();
        double BMI = weight / (height * height);
        String result = (BMI < 18.5) ? "体重过低" :
                        (BMI < 25) ? "体重正常" :
                        (BMI < 30) ? "超重" : "肥胖";
        System.out.printf("你的BMI值为:%.2f%n", BMI);
        System.out.println("体重评估结果:" + result);
    }
}

6.使用 Scanner 从键盘录入两个整数,然后计算并输出这两个数的和、差、积、商、余数。要求处理除数为 0 的异常情况,避免程序崩溃,不使用格式化输出,不保留小数点。

参考答案

import java.util.Scanner;

public class ArithmeticCalculator {
    public static void main(String[] args) {
        // 创建Scanner对象用于键盘录入
        Scanner scanner = new Scanner(System.in);

        // 提示并录入第一个整数
        System.out.print("请输入第一个整数:");
        int num1 = scanner.nextInt();

        // 提示并录入第二个整数
        System.out.print("请输入第二个整数:");
        int num2 = scanner.nextInt();

        // 计算并输出和、差、积
        System.out.println("两数之和:" + (num1 + num2));
        System.out.println("两数之差:" + (num1 - num2));
        System.out.println("两数之积:" + (num1 * num2));

        // 计算商和余数(处理除数为0的情况)
        if (num2 != 0) {
            // 商:直接使用整数除法(不保留小数)
            int quotient = num1 / num2;
            System.out.println("两数之商(整数除法):" + quotient);
            // 余数:仅整数可用
            int remainder = num1 % num2;
            System.out.println("两数之余数:" + remainder);
        } else {
            System.out.println("错误:除数不能为0,无法计算商和余数!");
        }

        // 关闭Scanner
        scanner.close();
    }
}

7.使用 Scanner 录入一个总秒数(整数),将其拆分为时、分、秒并输出。要求使用复合赋值运算符(/=、%=)简化计算逻辑,不使用格式化输出。

参考答案

import java.util.Scanner;

public class SecondsConverter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 录入总秒数
        System.out.print("请输入总秒数(整数):");
        int totalSeconds = scanner.nextInt();

        // 备份原始值(避免计算中覆盖)
        int temp = totalSeconds;

        // 拆分小时:1小时=3600秒
        int hours = temp / 3600;
        temp %= 3600; // 等价于 temp = temp % 3600,剩余秒数

        // 拆分分钟:1分钟=60秒
        int minutes = temp / 60;
        temp %= 60; // 剩余秒数

        // 最终剩余的秒数
        int seconds = temp;

        // 输出结果(移除格式化,改用普通拼接)
        System.out.println(totalSeconds + " 秒 = " + hours + " 时 " + minutes + " 分 " + seconds + " 秒");

        scanner.close();
    }
}

8.程序执行流程:for循环-求水仙花数

package com.itheima._02循环结构;

/**
 * @Description Demo022
 * @Author songyu
 * @Date 2026-01-29  15:26
 */
public class Demo025 {

    public static void main(String[] args) {
        /*
        * 需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
            1。水仙花数是一个三位数
            2。水仙花数的个位、十位、百位的数字立方和等于原数
        * */

        //1、定义一个for循环从“100一直到999”
        for (int i = 100; i <= 999; i++) {

            //2、在循环中获取每个数的个位、十位、百位数字。
            //个位: 数字 % 10
            int g = i % 10;
            //十位: 数字/10%10
            int s = i / 10 % 10;
            //百位: 数字/100
            int b = i / 100;
            //3、使用if判断:个位、十位、百位的数字立方和是否等于原数,等于则输出该数据。
            // if(g*g*g + s*s*s + b*b*b == i){  Ctrl+D复制当前行粘贴到下一行 ,Ctrl+/注释当前行
            // 另一种求指定数据的几次幂API:Math.pow(数据,设置次幂)
            if(Math.pow(g,3) + Math.pow(s,3) + Math.pow(b,3) == i){
                // System.out.println(i+" ");//输出数据后面“\n”进行文本内容换行
                System.out.print(i+" ");//输出数据后面没有换行
            }
        }
    }
}

9.嵌套循环案例:九九乘法表

package com.itheima._02循环结构;

/**
 * @Description Demo029
 * @Author songyu
 * @Date 2026-01-29  17:30
 */
public class Demo029 {

    public static void main(String[] args) {
        //目标:控制台打印9*9乘法表
        //外层循环行数
        for (int row = 1; row <= 9; row++) {
            String str ="";//用于拼接一行所有列的数据
            //内层循环列输出
            for (int col = 1; col <= row; col++) {
                str += col+" * "+row+" = "+(col*row)+"\t";  // \t一个制表符,一个tab键的格式化,相当于2个空格
                //循环第一行:           1    *   1     =   1
                //循环第二行第一列:      1    *   2     =   2
                //循环第二行第二列:      2    *   2     =   4
            }
            //到这里一行所有列拼接完成
            System.out.println(str);
        }
    }
}

10.综合案例:猜数字

package com.itheima._03综合案例;

import javax.swing.*;
import java.util.Random;
import java.util.Scanner;

/**
 * @Description Demo031
 * @Author songyu
 * @Date 2026-01-29  19:04
 */
public class Demo031 {

    public static void main(String[] args) {
        /*
        * 需求:随机生成一个1-100(不包括)之间的整数,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
        * */

        //1.生成随机数
        //方式1:创建随机对象Random, Random random = new Random()
        //      random.nextInt(100), 生成0~100,包含0,不包含100,
        //           要求生成1~100, random.nextInt(100)+1 就可以是1~100
        //           要求生成65~90, random.nextInt(26)+65 公式:random.nextInt(最大值-最小值+1)+最小值
        //      random.nextInt(1,100),生成1~100之间,包含1,不包含100,最推荐,这个api只有jdk17及以上版本才有
        Random random = new Random();
        System.out.println(random.nextInt(100));
        System.out.println(random.nextInt(1,100));

        //方式2:Math.random() 生成0~1随机数,包含0,不包含 1
        //      要求生成 1~100,(int)(Math.random()*100+1)
        //      要求生成65~90, (int)(Math.random()*26+65)
        System.out.println(Math.random());

        //获取生成的1~100之间的随机数
        int number = random.nextInt(1, 100);
        Scanner sc = new Scanner(System.in);

        int count = 0;
        while(true){
            count++;
            System.out.println("请输入您要猜的数字:");
            int num = sc.nextInt();
            if(num>number){
                System.out.println("猜大了");
            }else if(num<number){
                System.out.println("猜小了");
            }else{
                System.out.println("猜对了,一共猜了"+count+"次");
                break;//return也可以
            }
        }


    }
}

11.键盘录入月份数字(1-12),使用switch-case输出对应季节:

  • 12、1、2月:冬季

  • 3-5月:春季

  • 6-8月:夏季

  • 9-11月:秋季

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = sc.nextInt();

        switch (month) {
            case 12: 
            case 1: 
            case 2:
                System.out.println("冬季");
                break;
            case 3: case 4: case 5:
                System.out.println("春季");
                break;
            case 6: case 7: case 8:
                System.out.println("夏季");
                break;
            case 9: case 10: case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("输入错误");
        }
    }
}

12.根据程序员的工龄(整数)给程序员涨工资(整数),程序员的工龄和基本工资通过键盘录入

涨工资的条件如下:

[10-15) +20000

[5-10) +10000

[3~5) +5000

[1~3) +3000

运行程序:

请输入作为程序员的你的工作的工龄:10

请输入作为程序员的你的基本工资为:60000

"您目前工作了10年,基本工资为 60000元, 应涨工资 20000元,涨后工资 80000元"

public class Demo03 {
    public static void main(String[] args) {
        //1.创建键盘录入Scanner类的对象
        Scanner sc = new Scanner(System.in);
        //2.获取键盘录入的代表工龄的整数数字,保存int变量gl中
        System.out.println("请输入作为程序员的你的工作的工龄:");
        int gl = sc.nextInt();
        //3.获取键盘录入的代表基本工资的整数数字,保存int变量jbgz中
        System.out.println("请输入作为程序员的你的基本工资为:");
        int jbgz = sc.nextInt();
        //4.定义int变量yzgz,用来记录应涨工资的数量
        int yzgz = 0;
        //5.使用if语句第三种格式判断工龄的范围,记录应涨工资
        if (gl >= 10 && gl < 15) {
            yzgz = 20000;
        } else if (gl >= 5 && gl < 10) {
            yzgz = 10000;
        } else if (gl >= 3 && gl < 5) {
            yzgz = 5000;
        } else if (gl >= 1 && gl < 3) {
            yzgz = 3000;
        } else {
            yzgz = 0;
        }
        //6.根据题目需求输出结果数据
        System.out.println("您目前工作了" + gl + "年,基本工资为 "
                + jbgz + "元, 应涨工资 " + yzgz + "元,涨后工资 " + (jbgz + yzgz) + "元");
    }
}

13.数组的遍历

定义整型数组

int[] arr = {100,19,99,88,200};

需求1:求和

需求2:查找88在的索引位置

需求3:求最值

遍历

输出:

求和结果:506

找到了88数据的索引下标,下标为:3

最大值:200

最小值:19
package com.itheima._02数组动态初始化;

/**
 * @Description Demo022
 * @Author songyu
 * @Date 2026-01-30  15:03
 */
public class Demo022 {

    public static void main(String[] args) {
        //目标:数组的遍历

        //1.定义整型数组
        int[] arr = {100,19,99,88,200};

        //需求1:求和
        int sum = 0;

        //需求2:查找88在的索引位置
        int index = -1;

        //需求3:求最值
        //分析:求最大值实现思路,定义max赋值为数组第一个元素的值,再与其他元素依次比对,每次比对结果max存储较大的值,所有元素都比对完成max就是最大值
        //分析:求最小值实现思路,定义min赋值为数组第一个元素的值,再与其他元素依次比对,每次比对结果min存储较小的值,所有元素都比对完成min就是最小值
        //定义max,min
        int max = arr[0],min = arr[0];

        //2.遍历
        for (int i = 0; i < arr.length; i++) {
            //System.out.println(arr[i]);

            sum += arr[i];

            //查找88在的索引位置
            if(arr[i]==88){
                index = i;
            }

            //求最大
            if(i!=0 && max<arr[i]){
                max = arr[i];
            }

            //求最小
            if(i!=0 && min>arr[i]){
                min = arr[i];
            }
        }

        System.out.printf("求和结果:%d\n",sum); //  %d 整型数字占位符

        if(index>-1){
            System.out.printf("找到了88数据的索引下标,下标为:%d\n",index);
        }else{
            System.out.println("没有找到88数据");
        }

        System.out.printf("最大值:%d\n",max);
        System.out.printf("最小值:%d\n",min);
    }
}

14.请用面向对象编程的方式,存储两个学生的信息(姓名,语文成绩,数学成绩),并提供方法打印出每个学生的总成绩和平均成绩。

package com.itheima._04面向对象编程案例;

/**
 * @Description Student
 * @Author songyu
 * @Date 2026-01-30  16:59
 */
public class Student {

    String name;//姓名
    double chinese;//语文成绩
    double math;//数学成绩

    /**
     * 打印总成绩
     */
    public void printTotalScore(){
        System.out.printf("[%s]学生各科成绩总分:%.2f\n",name,chinese+math);
        //  %.2f   %f代表小数  .2格式化小数2位
    }

    /**
     * 打印平均成绩
     */
    public void printAverageScore(){
        System.out.printf("[%s]学生各科平均成绩:%.2f\n",name,(chinese+math)/2);
    }
}

15.将数字1-10保存到一个长度为10的一个整数数组中 定义一个新数组,长度为3,取出原来数组中随机三个元素(不考虑是否重复) 给新数组的元素赋值 求新数组所有元素的和

程序执行,在控制台输出效果【结果不唯一】

新数组的元素是:
1 7 7
新数组的元素和是:
15
import java.util.Arrays;
import java.util.Random;
public class Test06 {
    public static void main(String[] args) {
        //1. 先定义一个静态数组arr1,用于存放1-10
        int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        //2. 我们再定义一个动态数组arr2,用于存放3个元素
        int[] arr2 = new int[3];
        //3. 遍历arr2,给里面的每个元素赋值
        //3.1 先创建随机数对象
        Random r = new Random();
        for (int i = 0; i < arr2.length; i++) {
           //3.2 用随机数获取一个范围在[0,9]之间的数字,作为索引,从arr1中获取对应的值
            int index = r.nextInt(arr1.length);
            //3.2 把获取到的数据赋值给新数组arr2的元素
            arr2[i] = arr1[index];
        }
        System.out.println("arr2的值是:" + Arrays.toString(arr2));
        //4. 先定义一个变量sum,用于记录总和
        int sum = 0;
        //5. 遍历数组,获取每一个元素
        for (int i = 0; i < arr2.length; i++) {
            //5.1 求和
            sum += arr2[i];
        }
        //6. 循环结束,sum即为总和
        System.out.println("总和为:" + sum);
    }
}

16.定义一个长度为6的数组,使用随机数的知识,生成[1,9]的数据,保存到数组中。要求,保存到数组中的数据不能重复

程序执行,在控制台输出效果【结果不唯一】

数组的元素是:
1 8 6 5 9 3
public class Test07 {
    public static void main(String[] args) {
        //1. 先定义长度为6的动态数组
        int[] arr = new int[6];
        //2. 创建一个随机数对象
        Random r = new Random();
        //3. 遍历数组,给数组的每一个元素进行赋值
        for (int i = 0; i < arr.length; ) { //这里不能直接写i++,我们需要存入数据之后,索引才+1
             //3.1 先生成一个随机数number
            int number = r.nextInt(1, 10);
            //3.2 需要判断number是否存在于数组前面元素
            //需要定义一个标记,用来表示循环执行完之后的结果
            boolean flag = false; //默认number是不存在于数组中
                    //3.2.1 重新遍历数组,获取数组前面几项
            for (int j = 0; j < i; j++) {
                //3.2.1.1 用当前的元素和number进行比较,如果有相同的,就代表存在
                if(number == arr[j]){
                    flag = true;//改变标记的值,设置为true,代表number存在于数组中
                    break;
                }
            }
            //3.2.2 如果循环结束之后,都没有相同的,则代表不存在。我们就需要把当前的number存入到数组中
            if(!flag){ //代表没有
               arr[i] = number;
               i++;
            }
        }
        
        System.out.println("元素为:" + Arrays.toString(arr));
    }
}

17. 定义一个方法判断年份是否是闰年(能被4整除但不能被100整除,或能被400整除)

public class Demo01 {
    public static void main(String[] args) {
        //调用方法,判断年份是否是闰年
        boolean result = isLeapYear(2024);
        System.out.println(result); // 输出 true
    }

    public static boolean isLeapYear(int year) {
        return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
    }
}

18. 定义一个方法,判断一个整数是否是质数(只能被1和自身整除)。

public class Demo02 {
    public static void main(String[] args) {
        System.out.println(isPrime(17)); // 输出 true
    }
	//定义方法,参数是要判断的整数,返回值true表示是质数,false表示不是质数
    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false; //小于等于1的数不是质数,直接返回false
        }
        for (int i = 2; i <= num/2; i++) {  //例如:num=17,只需要判断1~8能否整除17就行了,另一半就不用判断了。
            if(num % i == 0) {
                return false;
            }
        }
        //如果都不能整除,就表示是质数,返回true。
        return true;
    }
}

19.定义一个方法,接收一个字符,分别打印出其英文字母、空格、数字和其它字符的个数。

public class Demo04 {
    public static void main(String[] args) {
        printCharNumber("adhfu988 98af 2@$");
    }

    /*
    定义一个方法,接收一个字符,分别统计出其英文字母、空格、数字和其它字符的个数。
     */
    public static void printCharNumber(String s){
        //1 定义四个变量,分别保存英文字母、空格、数字还是其它字符的个数
        int letterCount=0;      //保存英文字母的个数
        int spaceCount=0;       //保存空格的个数
        int numCount=0;         //保存数字的个数
        int otherCount=0;       //保存其它字符的个数
        //2 将字符串转换成字符数组
        char[] chs = s.toCharArray();
        //3 遍历字符数组,获取字符串的每一个字符
        for (int i = 0; i < chs.length; i++) {
            char ch = chs[i];
            //3 判断字符是 :英文字母、空格、数字还是其它字符,对应保存数量的变量+1
            if((ch >='a' && ch <='z') || (ch >='A' && ch <='Z')){
                letterCount++;
                letter+=ch;
            }else if(ch ==' '){
                spaceCount++;
                space+=ch;
            }else if(ch>='0' && ch<='9'){
                numCount++;
            }else{
                otherCount++;
            }
        }
        //5 打印结果
        System.out.println("英文字母的个数:"+letterCount);
        System.out.println("空格的个数:"+spaceCount);
        System.out.println("数字的个数:"+numCount);
        System.out.println("其它字符的个数:"+otherCount);
    }
}

20.全参构造器在set存在设置数据录入逻辑时将会优先调用set方法

9-25.png

21.银行账户管理

需求:

  1. 创建BankAccount类,包含私有属性:账号(id)、余额(balance)

  2. 添加静态属性totalAccounts记录总账户数

  3. 实现存款(deposit)、取款(withdraw)方法,取款时余额不足需提示

  4. 通过构造器实现开户自动生成账号(格式:BA0001,BA0002...)

  5. 在main方法中创建3个账户测试功能

考查知识点: static关键字、构造器、方法封装

public class BankAccount {
    private String id;
    private double balance;
    private static int totalAccounts = 0;
//自我拓展
    /*public BankAccount() {
        // 第一步:先校验账户上限,最多9999个
        if (totalAccounts >= 9999) {
            System.out.println("开户失败!系统账户上限为9999个,无法新增账户");
            return; // 终止构造,不再生成账号
        }
        // 第二步:已开户数自增(从1开始,对应BA0001)
        totalAccounts++;
        // 第三步:格式化生成账号:BA + 4位补零数字
        // %04d:不足4位补0,总长度4位,完美实现0001~9999
        this.id = String.format("BA%04d", totalAccounts);
    }*/
    public BankAccount() {
        totalAccounts++;
        this.id = "BA000" + totalAccounts;
    }
    
    public void deposit(double amount) {
        if(amount > 0) {
            balance += amount;
        }
    }
    
    public void withdraw(double amount) {
        if(amount > balance) {
            System.out.println("余额不足!");
        } else {
            balance -= amount;
        }
    }
    
    // getter方法省略...
}

public class Demo03{
    public static void main(String[] args) {
        BankAccount a1 = new BankAccount();
        a1.deposit(1000);
        a1.withdraw(500);
        
        BankAccount a2 = new BankAccount();
        a2.deposit(2000);
        a2.withdraw(3000); // 触发余额不足提示
        
        System.out.println("总账户数:" + BankAccount.totalAccounts);
    }
}

22.数学工具类

需求:

  1. 创建MathUtils工具类

  2. 包含静态方法:计算数组最大值、最小值、总和、平均值

  3. 所有方法接收int数组参数并返回计算结果

  4. 禁止实例化该类(构造器私有化)

考查知识点: static方法、工具类设计、私有构造器

public class MathUtils {
    private MathUtils() {} // 禁止实例化
    
    //定义方法,求数组中所有元素之和
    public static int getMax(int[] arr) {
        int max = arr[0];
        for(int i=0; i<arr.length; i++) {
            if(arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
    
    //定义方法,求数组中所有元素的平均值
    public static double getAvg(int[] arr) {
        //调用getSum方法,对数组中的元素求和
        int sum = getSum(arr);
        //求平均值并返回
        return sum*1.0/arr.length;
    }
}

public class Demo04{
    public static void main(String[] args) {
        int[] arr = {5, 3, 9, 1, 7};
        System.out.println("最大值:" + getMax(arr));
        System.out.println("平均值:" + getAvg(arr));
    }
}

23.电影信息展示系统

7-56.png
package com.itheima._08综合案例电影信息展示系统;

/**
 * @Description Movie
 * @Author songyu
 * @Date 2026-02-03  10:04
 */
public class Movie {

    private String name; //电影名称
    private double score; //评分
    private String director; //导演

    public Movie() {
    }
    public Movie(String director, String name, double score) {
        this.director = director;
        this.name = name;
        this.score = score;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "director='" + director + '\'' +
                ", name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}
package com.itheima._08综合案例电影信息展示系统;

/**
 * @Description 定义MovieSystem处理电影数据逻辑
 * @Author songyu
 * @Date 2026-02-03  10:07
 */
public class MovieSystem {

    //定义存储全部电影的数组,全局一份
    private static Movie[] movies;

    //初始化电影
    static{
        // 1. 创建Movie数组,长度为5,用于存储5个电影对象
        movies = new Movie[6];

        // 2. 创建5个热门电影对象,并赋值给数组元素
        // 电影1:《肖申克的救赎》
        movies[0] = new Movie("弗兰克·德拉邦特", "肖申克的救赎", 9.7);
        // 电影2:《霸王别姬》
        movies[1] = new Movie("陈凯歌", "霸王别姬", 9.6);
        // 电影3:《阿甘正传》
        movies[2] = new Movie("罗伯特·泽米吉斯", "阿甘正传", 9.5);
        // 电影4:《泰坦尼克号》
        movies[3] = new Movie("詹姆斯·卡梅隆", "泰坦尼克号", 9.5);
        // 电影5:《千与千寻》
        movies[4] = new Movie("宫崎骏", "千与千寻", 9.4);
        movies[5] = new Movie("黑马", "黑马程序员霸王", 9.9);
    }

    //定义展现所有电影的方法
    public static void showAllMovies(){
        System.out.println("显示全部电影信息如下:");
        System.out.println("序号\t\t电影名字");
        for (int i = 0; i < movies.length; i++) {
            System.out.printf("%d\t\t%s\n",i+1,movies[i].getName());
        }
    }

    //定义根据电影名称展现电影详情
    public static void showDetailByName(String name){
        //定义记录存储找到符合的电影数量
        int number = 0;
        //1.根据name查找电影数组中是否含有这部电影
        for (int i = 0; i < movies.length; i++) {
            //介绍api: 字符串.contains("包含的字符串") 返回boolean 返回true代表包含,否则不包含
            if(movies[i].getName().contains(name)){
                //2.如果含有展现详情数据
                number++;
                System.out.println("找到符合的第"+number+"部电影详情信息如下:");
                System.out.println("电影名称:"+movies[i].getName());
                System.out.println("电影评分:"+movies[i].getScore());
                System.out.println("电影导演:"+movies[i].getDirector());
            }
        }

        //3.如果没有显示“您搜索的电影不存在。。。”
        if(number==0){
            System.out.println("您搜索的电影不存在。。。");
        }
    }
}
package com.itheima._08综合案例电影信息展示系统;

import java.util.Scanner;

/**
 * @Description Demo081
 * @Author songyu
 * @Date 2026-02-03  10:04
 */
public class Demo081 {

    public static void main(String[] args) {

        //用户交互逻辑实现
        Scanner sc = new Scanner(System.in);

        //死循环
        while(true) {

            //展现用户操作的菜单,1是展现全部电影信息,2.根据电影名称查询电影详情.3退出
            System.out.println("================欢迎来到黑马影院================");
            System.out.println("1、展现全部电影信息");
            System.out.println("2、根据电影名称查询电影详情");
            System.out.println("3、退出");
            System.out.println("=============================================");
            System.out.println("请输入您操作的序号(1~3):");

            //获取用户输入的序号
            int number = sc.nextInt();
            //序号操作匹配
            switch (number){
                case 1 -> MovieSystem.showAllMovies();
                case 2 -> {
                    System.out.println("请输入搜索的电影名称:");
                    String name = sc.next();
                    MovieSystem.showDetailByName(name);
                    break;
                }
                case 3 -> {
                    System.out.println("感谢观看,欢迎下次光临");
                    return;
                }
                default -> System.out.println("无效菜单,重新输入");
            }
        }

    }
}

评论交流

文章目录