【蓝桥杯Java_C组·从零开始卷】第四节、一维数组与二维数组

举报
红目香薰 发表于 2022/01/23 01:31:58 2022/01/23
【摘要】 整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理。 目录 数组概述 什么是数组 数组的结构 数组的特点: 数组分类 一维数组声明与赋值 数组的常用属性与方法 数组的遍历 一维数组demo案例 数组随机赋值 ​选择排序 冒泡排序 增强fo...

整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理。

目录

数组概述

什么是数组

数组的结构

数组的特点:

数组分类

一维数组声明与赋值

数组的常用属性与方法

数组的遍历

一维数组demo案例

数组随机赋值

​选择排序

冒泡排序

增强for循环

二维数组声明

二维数组练习题:

交叉数组

交叉数组遍历

总结:


数组概述

什么是数组

单个变量能存储信息。

如果有批量数据需要存储,单个变量存储时间和空间上不经济和实用,而且过于麻烦,这时候需要用数组这一引用数据类型来存储。

数组: 用来存储具有相同数据类型的数据的集合,可以使用共同的名字来引用数组中存储的数据。

特点: 数组可以存储任何类型的数据,包括原始数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。

数组的结构

数组是一个变量,用于将相同数据类型的数据存储在内存空间中,数组中的所有元素必须属于相同的数据类型。

栈(stack)与堆(heap)都是Java用来在Ram(随机存取存储器)中存放数据的地方。

与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

数组为了在内存中能够存取多个数据更加方便,在设计数组时,数组的结构和基本要素都与生活中的电子储物柜非常类似。

数组的特点:

  1. 同一个数组中的数组元素必须具有相同的数据类型,且在内存中连续分布。
  2. 无论数组中包含多少个数组元素,该数组只存在一个名称,即数组名。
  3. 数组元素的编号称为下标,数组的下标从0 开始 可以通过“数组名[ 下标]”的方式访问数组中的任何元素。
  4. 数组的长度指数组可以存储元素的最大个数,在创建数组时确定。

数组分类

在Java语言中,存在多种形式的数组。

 

一维数组声明与赋值

 

 

 

 


  
  1. int [] array;//整数数组
  2. int array[]= new int[10];
int[] array= new int[10];
 

数组的常用属性与方法


  
  1. int[] array= new int[10];
  2. //数组的长度
  3. array.length;
  4. //自然排序
  5. Arrays.sort(array)

数组的遍历


  
  1. int [] a=new int[10];
  2. for (int i = 0; i < a.length; i++) {
  3. a[i]=i+1;
  4. }
  5. for (int i = 0; i < a.length; i++) {
  6. System.out.print(a[i]+",");
  7. }

一维数组demo案例

     问题描述:输入本部门5位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。要求:薪资的涨幅不能超过原薪资的20%,若涨幅超过20%,则按照原薪资的20%进行提薪。

数组随机赋值


  
  1. package Action;
  2. import java.util.Random;
  3. public class demos {
  4. public static void main(String[] args) {
  5. // 声明随机数
  6. Random ra = new Random();
  7. int[] arrays = new int[10];
  8. // 赋值
  9. for (int i = 0; i < arrays.length; i++) {
  10. arrays[i] = ra.nextInt(50);
  11. }
  12. // 遍历
  13. for (int i = 0; i < arrays.length; i++) {
  14. System.out.print(arrays[i] + ",");
  15. }
  16. }
  17. }

算法中经常会用到某个班级、某个公司、某个集体中随机选某些人,或者棋牌类游戏进行棋牌的分发,彩票的出奖,红包随机分发匹配人员等操作。 所以,我们需要使用一定的算法进行获取一定数量的不重复的随机数数组。 

选择排序


  
  1. package Action;
  2. public class demos {
  3. public static void main(String[] args) {
  4. int count = 0;
  5. int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 };
  6. for (int i = 0; i < arr.length; i++) {// 前者循环次数
  7. for (int j = 0; j < arr.length; j++) {// 后者循环次数
  8. if (arr[i] > arr[j]) {// 如果i>j就是ture,【1】>【2】
  9. int change = arr[i];// 赋值给change,告诉change,i多大
  10. arr[i] = arr[j];// arr[i]赋值给arr[i],换位置
  11. arr[j] = change;// arr[j]赋值给change,进行下一轮比较
  12. }
  13. count++;
  14. }
  15. }
  16. for (int j2 = 0; j2 < arr.length; j2++) {
  17. System.out.print(arr[j2] + ",");
  18. }
  19. System.out.println("\n循环次数:" + count);// 100次循环
  20. }
  21. }

冒泡排序


  
  1. package Action;
  2. public class demos {
  3. public static void main(String[] args) {
  4. int count = 0;
  5. int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 };
  6. for (int i = 0; i < arr.length - 1; i++) {
  7. for (int j = 0; j < arr.length - 1 - i; j++) {// 循环次数递减
  8. if (arr[j] < arr[j + 1]) {// 从大到小排列
  9. int change = arr[j];
  10. arr[j] = arr[j + 1];
  11. arr[j + 1] = change;// 值交换
  12. }
  13. count++;
  14. }
  15. }
  16. for (int j2 = 0; j2 < arr.length; j2++) {
  17. System.out.print(arr[j2] + ",");
  18. }
  19. System.out.println("\n循环次数:" + count);// 45次循环
  20. }
  21. }

增强for循环


  
  1. int nums[] = {1,2,3,4,5,6};
  2. for(int num : nums) {
  3. System.out.println(num);
  4. }

二维数组声明

二维数组的创建同样有两种方式

方式一:

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

String [][]str = new String[5][5]; 
 

方式二:

声明数组并且赋初始值

int [][] array = {{23,45,45},{12,11,10},{23,12,56}};
 

二维数组练习题:

计算二维整数数组两条对角线的值的总和。 


  
  1. int[][] x1 = {
  2. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  3. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  4. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  5. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  6. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  7. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  8. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  9. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  10. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  11. };

交叉数组


  
  1. int[][] arrays = {
  2. { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
  3. { 1, 2, 3, 4, 5, 6},
  4. { 1, 2, 3, 4, 5, 6, 7 },
  5. { 1, 2, 3, 4, 5, 6},
  6. { 1, 2, 3, 4 },
  7. { 1, 2, 3, 4, 5 },
  8. { 1, 2},
  9. { 1, 2, 3, 4, 5, 6, 7, 8 },
  10. { 1 },
  11. };

交叉数组遍历


  
  1. //交叉数组遍历
  2. for (int i = 0; i < arrays.length; i++) {
  3. for (int j = 0; j < arrays[i].length; j++) {
  4. System.out.print(arrays[i][j]+",");
  5. }
  6. System.out.println();
  7. }

总结:

数组:一组数据

数组能存储所有数据类型的数据

同一个数组的所有数据必须是同一类型

 数组的长度固定,不能改变

数组有一个属性:length

数组对象.length;

数组的长度

分类:一维数组和多维数组

数组的使用

第一步:声明数组变量

数据类型 [] 数组变量名;如:int [] a;   

第二步:创建数组对象         

new 数据类型[所要创建的数组的长度];     

如:new int[5];     

第三步:给数组元素赋值         

数组变量名[下标]=1;     

如:int[] a=new int[5];         a[0]=1;     

第四步:访问数组的元素         

int max=a[0];    //数组元素的使用,作为数据,给其他变量赋值

System.out.println(a[0]);//把数组元素保存的数据打印输出

文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。

原文链接:laoshifu.blog.csdn.net/article/details/122275725

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。