当前位置: 首页 > news >正文

Java 学习笔记(基础篇4)

1. 综合练习

① 开发验证码

编写一个 Java 程序,实现如下功能:

  1. 程序需要首先准备一个包含 26 个小写字母(a-z)和 26 个大写字母(A-Z)的字符数组,共 52 个字符。
  2. 从上述字符数组中随机选取 4 个字符,拼接成字符串。
  3. 生成一个 0-9 之间的随机数字,拼接到上述字符串的末尾。
  4. 最终将拼接后的完整字符串输出到控制台(注意:初始字符串以一个空格开头)。
public class test1 {public static void main(String[] args) {char[] chs = new char[52];for (int i = 0; i < chs.length; i++) {if (i <= 25){chs[i] = (char)(97 + i);} else{chs[i] = (char)(65 + i - 26);}}String result = " ";Random r = new Random();for (int i = 0; i < 4; i++) {int randomIndex = r.nextInt(chs.length);result += chs[randomIndex];}int number = r.nextInt(10);result = result + number;System.out.println(result);}
}

关键逻辑:准备字符数组:存储所有大小写字母:

  • 小写字母填充(i 从 0 到 25)
    通过 (char)(97 + i) 计算字符。
    原理:在 ASCII 编码中,'a' 对应数字 97,'b' 对应 98…… 因此 97 + i 当 i=0 时为 97(即'a'),i=1 时为 98(即'b'),直到 i=25 时为 122(即'z')。

  • 大写字母填充(i 从 26 到 51)
    通过 (char)(65 + i - 26) 计算字符。
    原理:ASCII 中 'A' 对应 65,i-26 让索引从 26 开始重新转为 0-25(例如 i=26 时,i-26=0,对应 65+0=65 即'A';i=27 时对应'B',直到 i=51 时为 65+25=90 即'Z')。

最终数组内容:['a','b',...,'z','A','B',...,'Z']

② 评委打分

某比赛需要实现一个评委打分系统,规则如下:

  1. 共有 6 位评委对选手进行打分,打分范围为 0-100 分(包含 0 和 100),超出范围的分数为无效分数,需重新输入;
  2. 系统需接收并存储 6 位评委的有效打分;
  3. 最终得分计算规则为:去掉一个最高分和一个最低分后,计算剩余分数的平均值(结果取整数);
  4. 输出所有评委的打分以及选手的最终得分。

要求:

需使用方法封装不同的功能,至少包含以下方法:

  • getScores():负责接收用户输入的 6 个有效分数,返回存储分数的数组;
  • getMax(int[] scoreArr):接收分数数组,返回数组中的最高分;
  • getMin(int[] scoreArr):接收分数数组,返回数组中的最低分;
  • getSum(int[] scoreArr):接收分数数组,返回数组中所有分数的总和;
public class test1 {public static void main(String[] args) {int[] scoreArr = getScores();for (int i = 0; i < scoreArr.length; i++) {System.out.println(scoreArr[i]);}int max = getMax(scoreArr);int min = getMin(scoreArr);int sum = getSum(scoreArr);int avg = (sum - max -min) / (scoreArr.length -2);System.out.println("选手的最终得分为" + avg);}public static int getMax(int[] scoreArr){int max = scoreArr[0];for (int i = 1; i < scoreArr.length; i++) {if (scoreArr[i] > max) {max = scoreArr[i];}}return max;}public static int getMin(int[] scoreArr){int min = scoreArr[0];for (int i = 1; i < scoreArr.length; i++) {if (scoreArr[i] < min) {min = scoreArr[i];}}return min;}public static int getSum(int[] scoreArr){int sum = 0;for (int i = 0; i < scoreArr.length; i++) {sum = sum + scoreArr[i];}return sum;}public static int[] getScores(){int[] scores = new int[6];Scanner sc = new Scanner(System.in);for (int i = 0; i < 6; ){System.out.println("请输入评委的打分");int score = sc.nextInt();if (score >= 0 && score <= 100){scores[i] = score;i++;} else{System.out.println("成绩超出范围,继续录入,当前的i为" + i);}}return scores;}
}

main 方法:

(1) int[] scoreArr = getScores(); 

  • 这行代码中,getScores() 方法返回的是数组的引用(可以理解为数组在内存中的地址),而不是数组本身的数据。
  • 方法执行结束时,return scores; 返回的是这个数组的引用(地址)。

(2) int max = getMax(scoreArr);

  • 作用:调用getMax方法,传入scoreArr数组,获取数组中的 “最高分”,并把这个值存到变量max中。
  • 例子:如果scoreArr[80, 90, 85, 95, 75, 88],那么max会被赋值为 95。

getScores() 方法:

(1) 分支 1(有效分数):

  • scores[i] = score;:把当前有效分数存到数组scores的第 i 个位置(比如 i=0 时存第一个分数,i=1 时存第二个,以此类推)。
  • i++;:只有分数有效时,i才 + 1,确保下一次循环录入下一个位置的分数(直到 i=6 时循环结束)。

(2) 注意方法的返回值类型是 Int[ ]

getMax() 方法:

核心原则:参数的类型(这里的int[])不能错,因为它决定了方法能接收什么样的数据;而参数的名称只是一个标识符,只要方便理解和使用即可(通常会取有意义的名字,比如scoresa更易读)。

http://www.dtcms.com/a/335802.html

相关文章:

  • Java学习笔记:IDEA简单使用技巧
  • 安卓14系统应用收不到开机广播
  • HTTP请求参数类型及对应的后端注解
  • AMBA-AXI and ACE协议详解(七)
  • 【学习笔记】面向AI安全的26个缓解措施
  • API网关实施中典型陷阱
  • 【数据结构与算法】单调队列的定义和运用
  • 整体设计 之“凝聚式中心点”原型 --整除:智能合约和DBMS的深层联合 之1
  • Android Jetpack | Livedata
  • Gradle快速入门学习
  • 【算法】模拟专题
  • riscv中断处理软硬件流程总结
  • C++算法题目分享:二叉搜索树相关的习题
  • 原子指标、派生指标和复合指标
  • nodejs 中间件
  • 【Jenkins】01 - Jenkins安装
  • C语言网络编程TCP通信实战:客户端↔服务器双向键盘互动全流程解析
  • [GWCTF 2019]枯燥的抽奖
  • Java线程的6种状态和JVM状态打印
  • [TryHackMe]Brainpan1( 内存溢出)
  • PERCEIVER IO:一种用于结构化输入与输出的通用架构
  • 脉冲计数实现
  • 深入剖析ROS参数服务器通信机制 ——共享全局数据的“云端仓库”实现原理
  • Node.js安装教程
  • MySQL的事务日志:
  • java之 junit4单元测试Mockito的使用
  • 26. Object.defineProperty 和 Proxy 用法
  • 中级统计师-会计学基础知识-第五章 财务报告
  • 计算机算术6-SRT2除法
  • Linux817 shell:until,nfs,random