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

Java 学习笔记(基础篇5)

1. 综合练习

(1) 抽奖

public class test10 {public static void main(String[] args) {int[] arr = {2,588,888,1000,10000};Random r = new Random();for (int i = 0; i < arr.length; i++) {int randomIndex = r.nextInt(arr.length);int temp = arr[randomIndex];arr[randomIndex] = arr[i];arr[i] = temp;}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}

关键逻辑:

循环变量i从 0 遍历到数组长度 - 1,对每个位置的元素进行随机交换操作,步骤如下:

  • 生成随机索引:int randomIndex = r.nextInt(arr.length),随机索引范围是 0 到数组长度 - 1(此例中为 0-4)。
  • 交换元素:通过中间变量temp实现arr[i]arr[randomIndex]的位置交换
  • 由于代码仅进行元素位置的交换,没有新增、复制或删除元素,所以元素不会重复

(2) 双色球中奖系统

和 “判断中奖等级” 两大功能。具体需求如下:

号码组成

  • 红球:从 1-33 的整数中选择 6 个,不可重复
  • 蓝球:从 1-16 的整数中选择 1 个,可与历史号码重复
  • 一注完整号码包含 6 个红球 + 1 个蓝球,共 7 个数字

输入验证

  • 红球必须在 1-33 范围内,且 6 个红球不能重复
  • 蓝球必须在 1-16 范围内
  • 若用户输入不符合规则,需提示错误原因并要求重新输入
public class test11 {public static void main(String[] args) {int[] arr = createNumber();System.out.println("----------------");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();int[] userInputArr = userInputNumber();for (int i = 0; i < userInputArr.length; i++) {System.out.print(userInputArr[i] + " ");}int redCount = 0;int blueCount = 0;for (int i = 0; i < userInputArr.length - 1; i++) {int redNumber = userInputArr[i];for (int j = 0; j < arr.length - 1; j++) {if (redNumber == arr[j]) {redCount++;break;}}}int blueNumber = userInputArr[userInputArr.length - 1];if (blueNumber == arr[arr.length - 1]) {blueCount++;}System.out.println();System.out.println(redCount);System.out.println(blueCount);}public static int[] userInputNumber(){int[] arr = new int[7];Scanner sc = new Scanner(System.in);for (int i = 0; i < 6; ) {System.out.println("请输入第" + (i + 1) + "个红球号码");int redNumber = sc.nextInt();if(redNumber >= 1 && redNumber <= 33){boolean flag = contains(arr, redNumber);if (!flag){arr[i] = redNumber;i++;} else{System.out.println("当前红球号码已经存在,请重新输入");}} else{System.out.println("当前红球号码超出范围");}}System.out.println("请输入篮球号码");while (true) {int blueNumber = sc.nextInt();if (blueNumber >= 1 && blueNumber <= 16){arr[arr.length - 1] = blueNumber;break;} else{System.out.println("当前蓝球号码超出范围");}}return arr;}public static int[] createNumber(){int[] arr = new int[7];Random r = new Random();for (int i = 0; i < 6; ) {int redNumber = r.nextInt(33) + 1;boolean flag = contains(arr, redNumber);if (!flag) {arr[i] = redNumber;i++;}}int blueNumber = r.nextInt(16) + 1;arr[arr.length - 1] = blueNumber;return arr;}public static boolean contains(int[] arr, int number) {for (int i = 0; i < arr.length; i++) {if (arr[i] == number) {return true;}}return false;}
}

① 蓝球输入的无限循环,蓝球输入使用while (true)循环,直到输入合法才break

② contains() 方法:

public static boolean contains(int[] arr, int num) {for (int i = 0; i < arr.length; i++) {if (arr[i] == num) {  // 这里的numreturn true;}}return false;
}
  • 括号里的numint num)是形参:它是方法定义时声明的参数,用于接收调用方法时传入的实际值,是形参的 “定义处”。
  • 代码里的numarr[i] == num中的num)不是新的形参:它是对前面已经定义的形参num的 “使用”,引用的是同一个变量。

2. 二维数组

(1) 二维数组静态初始化:

int[][] arr = {{11, 22}, {33, 44}};

(2) 二维数组遍历

int[][] arr = {{11, 22, 33}, {44, 55, 66}};
for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();
}

(3) 二维数组动态初始化

数据类型[][] 数组名 = new 数据类型[行数][列数];

示例:

int[][] arr = new int[2][3];  // 2行3列的二维数组
arr[0] = new int[]{11, 22, 33};
arr[1] = new int[]{44, 55, 66};
  • 2:表示二维数组长度为 2,可以装 2 个一维数组
  • 3:表示每一个一维数组的长度都是 3,可以装 3 个 Int 类型的元素

(4) 计算总营业额

public class test12 {public static void main(String[] args) {int[][] yearArrArr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};int yearSum = 0;for (int i = 0; i < yearArrArr.length; i++) {int[] quarterArr = yearArrArr[i];int sum = getSum(quarterArr);System.out.println("第" + (i + 1) + "个季度的总营业额为" + sum);yearSum += sum;}System.out.println("全年总营业额为:" + yearSum);}public static int getSum(int[] arr){int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum;}
}

这个程序中存在两次遍历,分别对应不同的层次:

① 第一次遍历(在main方法中)

遍历的是二维数组的外层,目的是逐个取出每个季度的一维数组:

// 外层循环:遍历二维数组,每次取出一个季度的一维数组
for (int i = 0; i < yearArrArr.length; i++) {int[] quarterArr = yearArrArr[i]; // 取出当前季度的一维数组// ...
}

② 第二次遍历(在getSum方法中)
遍历的是单个一维数组,目的是计算这个数组中所有元素的总和

http://www.xdnf.cn/news/18305.html

相关文章:

  • 【OpenAI】 GPT-4o-realtime-preview 多模态、实时交互模型介绍+API的使用教程!
  • 宋红康 JVM 笔记 Day05|运行时数据区内部结构、JVM中的线程说明、程序计数器
  • RAID服务器
  • PDF处理控件Aspose.PDF教程:将 PNG 合并为 PDF
  • HTTP协议-4-浏览器是怎么抉择HTTP版本的?
  • 【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
  • 01.Linux小技巧
  • 「Flink」业务搭建方法总结
  • Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析
  • 《Python学习之第三方库:开启无限可能》
  • 【K8s】harbor安装与推送镜像
  • 104、【OS】【Nuttx】【周边】文档构建渲染:安装 Sphinx 扩展(上)
  • 【笔记】位错的定义和分类
  • K8s的命名空间需要创建吗
  • HAProxy使用方法以及和LVS区别
  • InfluxDB 开发工具链:IDE 插件与调试技巧(二)
  • 【DDIA】第十章:解析Reduce端连接与分组技术
  • 基于C语言实现的HRV分析方法 —— 与Kubios和MATLAB对比
  • Django 请求生命周期
  • 2025北京世界机器人大会 ​要点总结
  • 检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
  • PPT生成视频的AI大模型应用技巧
  • 第4.3节:awk正则表达式详解-特殊字符
  • apisix负载均衡测试
  • Webrtc在项目中承担的角色
  • 决策树-信息增益(第二十三节课内容总结)
  • 第2章:进阶篇——第2节:索引
  • 从决策树基础到熵与信息增益
  • PYTHON让繁琐的工作自动化-函数
  • 【DL学习笔记】交叉熵损失函数详解