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

【韩老师零基础30天学会Java 】06章 数组、排序和查找

第六章 数组、排序和查找

1. 数组🚩🚩

数组介绍:
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数组就是一组数据。

示例:

double [] hens={3,5,1,3,4,2,50,7.8,88.8,1.1,5};
double totalWeight=0;
for(int i=0;i<hens.length;i++){totalWeight+=hens[i];
}
System.out.println("总体重="+totalWeight+"平均体重="+totalWeight/hens.length);	

数组的使用方式1-动态初始化
在这里插入图片描述
示例: 循环输入5个成绩,保存在double数组,并输出。

		Scanner input=new Scanner(System.in);double[] scores=new double[5];for(int i=0;i<scores.length;i++){System.out.println("请输入第"+(i+1)+"个元素");scores[i]=input.nextDouble();}//输出遍历数组for(int i=0;i<5;i++){System.out.println(scores[i]);}

使用方式2-动态初始化
1)先声明数组
语法:数据类型 数组名[];也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;
2)创建数组
语法: 数组名=new 数据类型[大小];
a=new int[10];
在这里插入图片描述

使用方式3-静态初始化
在这里插入图片描述

数组使用注意事项和细节:

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  3. 数组创建后有默认值,如果没有赋值int 0,short 0, byte 0, long 0, float 0.0,double 0.0, char \u0000 ,boolean false, String null。
  4. 使用数组的步骤 1.声明数组并开辟空间 2. 给数组各个元素赋值 3 .使用数组。
  5. 数组的下标是从0开始的。
  6. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如int int[] arr=new int[5]; 则有效下标为 0-4。
  7. 数组属引用类型,数组型数据是对象(object)。

练习1:
在这里插入图片描述

		char[] chars=new char[26];for(int i=0;i<chars.length;i++){//chars 是 char[]//chars[i]是charchars[i]=(char)('A'+i);//'A'+i 是int}//输出for(int i=0;i<chars.length;i++){System.out.print(chars[i]+" ");}

练习2:
在这里插入图片描述

public class IntDetail{public static void main(String[] args){int[] arr={4,-1,9,10,23};int max=arr[0];int maxIndex=0;for(int i=0;i<arr.length;i++){if(arr[i]>max){max=arr[i];maxIndex=i;}}System.out.println("max="+max+" "+ "下标:"+maxIndex);}
}

练习3:
在这里插入图片描述

数组赋值机制❗❗❗

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

值传递和引用传递的区别❗❗❗在这里插入图片描述

数组拷贝(内容复制),数据空间是独立的 ,修改一个,另一个不受影响。
在这里插入图片描述

  • 代码:
		int[] arr1={4,-1,9,10,10,23,110,-23,56,888,-256};int [] arr2=new int[arr1.length];for(int i=0;i<arr1.length;i++){arr2[i]=arr1[i];}System.out.println("arr1的数组元素:");for(int i=0;i<arr1.length;i++){System.out.println(arr1[i]);}arr2[0]=456;System.out.println("arr2的数组元素:");for(int i=0;i<arr1.length;i++){System.out.println(arr2[i]);}

数组反转

方式一:找规律❗

  1. 把arr[0]元和 arr[5]进行交换{66,22,33,44,55,11}。
  2. 把arr[1]和 arr[4]进行交换{66,55,33,44,22,11}。
  3. 把 arr[2]和 arr[3]进行交换{66,55,44,33,22,11}。
  4. 一共要交换3次= arr.length。
  5. 每次交换时,对应的下标 是 arr[i]和 arr[arr.length-1-i]。
  • 代码:
		//数组反转:方式一int[] arr1={7,4,-1,9,10,23,110};for(int i=0;i<arr1.length/2;i++){int tmp=arr1[i];arr1[i]=arr1[arr1.length-1-i];arr1[arr1.length-1-i]=tmp;}System.out.println("===反转后的数组元素===");for(int i=0;i<arr1.length;i++){System.out.println(arr1[i]);}

方式二:使用逆序赋值

  • 代码:
		//数组反转:方式二int[] arr1={7,4,-1,9,10,23,110};int[] arr2=new int[arr1.length];for(int i=0;i<arr1.length;i++){arr2[i]=arr1[arr1.length-1-i];}System.out.println("===反转后的数组元素===");for(int i=0;i<arr2.length;i++){System.out.println(arr2[i]);}

数组添加
在这里插入图片描述

  • 代码
		//扩容int[] arr={1,2,3,4};int[] arrNew=new int[arr.length+1];for(int i=0;i<arr.length;i++){arrNew[i]=arr[i];}arrNew[arrNew.length-1]=4;arr=arrNew;System.out.println("===arr扩容后的数组元素===");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}

实现动态扩容
在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){Scanner myScanner=new Scanner(System.in);//扩容int[] arr={1,2,3,4};do{int[] arrNew=new int[arr.length+1];for(int i=0;i<arr.length;i++){arrNew[i]=arr[i];}System.out.println("请输入元素:");int num=myScanner.nextInt();arrNew[arrNew.length-1]=num;arr=arrNew;System.out.println("===arr扩容后的元素===");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}//?问用户是否添加System.out.println("是否继续添加y/n");char key=myScanner.next().charAt(0);if(key=='n')break;}while(true);System.out.println("退出");}
}

练习:
在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){Scanner myScanner=new Scanner(System.in);//减少int[] arr={15,21,33,49,8,23,56,81};do{//问用户是否减少if(arr.length==1){System.out.println("不能再减。");break;}else{System.out.println("是否继续减少 y/n");char key=myScanner.next().charAt(0);if(key=='n')break;}int[] arrNew=new int[arr.length-1];for(int i=0;i<arrNew.length;i++){arrNew[i]=arr[i];}arr=arrNew;System.out.println("===arr缩减后的元素===");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}while(true);System.out.println("退出");}
}

2. 排序

排序介绍
排序是将一群数据,依指定的顺序进行排列的过程
排序的分类:
1.内部排序:
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
2.外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。

冒泡排序

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
在这里插入图片描述
总结冒泡排序特点
1.我们一共有5个元素。
2.一共进行了 4轮排序,可以看成是外层循环。
3.每1轮排序可以确定一个数的位置,比如第1轮排序确定最大数,第2轮排序,确定第2大的数位置,依次类推。
4.当进行比较时,如果前面的数大于后面的数,就交换。
5.每轮比较在减少 4->3->2->1。

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){//冒泡排序int[] arr={24,69,80,57,13};int len=arr.length;int tmp=0;//4:是轮数=length-1for(int i=0;i<len;i++){for(int j=0;j<len-i;j++){if(arr[j]>arr[j+1]){tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}System.out.println("第"+i+"轮:冒泡排序后的结果:");for(int k=0;k<len;k++){System.out.print(arr[k]+" ");}System.out.print("\n");}	}
}

输出:
在这里插入图片描述

3. 查找

顺序查找

字符串判断相等:
findName.equals(names[i])

import java.util.Scanner;
public class IntDetail{public static void main(String[] args){//顺序查找String[] names={"学术","风格","河南","干扰"};Scanner myScanner=new Scanner(System.in);System.out.println("请输入查找内容:");String findName=myScanner.next();int  index=-1;for(int i=0;i<names.length;i++){if(findName.equals(names[i])){index=i;System.out.println(names[i]);System.out.println("下标为:"+i);break;}}if(index==-1){System.out.print("没找到"+findName);}	}
}

二分查找

4. 多维数组

二维数组
arr.length——行数 = 二维数组的元素个数
arr[0].length——列数

  • 代码
		int[][] arr={{1,2,3,4,5},{0,0,0,0,0},{2,3,7,9,0}};for(int i=0;i<arr.length;i++){for(int j=0;j<arr[0].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();

二维数组使用:动态创建二维数组
形式:
1
2 2
3 3 3
在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){int[][] arr= new int[10][];for(int i=0; i < arr.length; i++){arr[i] = new int[i+1];for(int j=0;j<arr[i].length;j++){arr[i][j]=i+1;}}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();}					}
}

二维数组遍历求和

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){int[][] arr= {{4,6},{1,4,5,7},{-2}};int sum=0;for(int i=0;i<arr.length;i++){for(int j=0;j<arr[i].length;j++){sum+=arr[i][j];}}System.out.println("sum="+sum);					}
}

杨辉三角?在这里插入图片描述

在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){int[][] yanghui= new int[10][];for(int i=0;i<yanghui.length;i++){yanghui[i]=new int [i+1];for(int j=0;j<yanghui[i].length;j++){if(j==0||j==yanghui[i].length-1){yanghui[i][j]=1;}else{yanghui[i][j]=yanghui[i-1][j]+yanghui[i-1][j-1];}}}for(int i=0;i<yanghui.length;i++){for(int j=0;j<yanghui[i].length;j++){System.out.print(yanghui[i][j]+" ");}System.out.println();}}
}

输出:
在这里插入图片描述

二维数组使用细节和注意事项:在这里插入图片描述

练习1:
在这里插入图片描述
答案:
b),e)✅

作业1:
在这里插入图片描述
答案:B、D、E❌
正确答案:B、D

作业2:
在这里插入图片描述
答案:blue✅

作业3:
在这里插入图片描述
答案:
1
3
5

正确答案:
1
3
5
7

作业4:
在这里插入图片描述

作业5:
在这里插入图片描述

作业6:
在这里插入图片描述
答案:a,z,韩,c,a,z,韩,c❌
正确答案:
a,a
z,z
韩,韩
c,c

作业7:
在这里插入图片描述


http://www.mrgr.cn/news/70598.html

相关文章:

  • windows实现VNC连接ubuntu22.04服务器
  • ssl证书,以 Nginx 为例
  • tcpdump抓包 wireShark
  • 先安装Ubuntu20.04,再安装win10实现双系统
  • 【React 进阶】掌握 React18 全部 Hooks
  • android 性能分析工具(03)Android Studio Profiler及常见性能图表解读
  • 常用的损失函数pytorch实现
  • Oracle OCP认证考试考点详解082系列18
  • 代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • 信息安全数学基础(47)域的结构
  • PCL 点云分割 分割圆柱体模型
  • PCL 点云分割 分割指定平面
  • 功率板布局布线进阶【一】
  • 以太网的发展
  • 大数据学习12之HBase
  • Chrome如何查看保存的网站密码,如此简单!
  • 使用PsExec工具
  • java双向链表解析实现双向链表的创建含代码
  • 仅想要实现一个网站登录者之间可以进行临时会话的功能, 需要几张数据表? 人工ai替你回答(ai版)
  • 全网最详细的自动化测试(Jenkins 篇)
  • 算法学习第一弹——C++基础
  • 在线绘制带community的蛋白质-蛋白质相互作用(PPI)网络图
  • 【JAVA】-WEB开发基础
  • 牛客周赛 Round 67
  • UE5遇到问题记录
  • More Effective C++:异常