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

【韩老师零基础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]是char
			chars[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-1
		for(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.kler.cn/a/390373.html

相关文章:

  • 深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
  • 2024.11.12_大数据的诞生以及解决的问题
  • 同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡
  • Unity3D
  • vue3+vite 前端打包不缓存配置
  • 微服务架构面试内容整理-SpringCloud Netflix‌与Spring Cloud Alibaba比较
  • Android 源码的下载与编译
  • yolo v11相关文件
  • 机器视觉中常用图像处理库都有哪些?重点关注.net
  • Qt 编写插件plugin,支持接口定义信号
  • 【日志】力扣167.两数之和2 - 输入有序数组 // Unity——Roll A Ball(一)
  • diboot低代码中使用junit测试controller,入参不生效问题解决
  • Java学习教程,从入门到精通,Java修饰符语法知识点及案例代码(23)
  • openlayers实现图层裁剪,只展示关心区域,抹掉无关区域,“抠”地图
  • ARM64环境使用docker-compose进行ElasticSearch8集群部署
  • Scala中的可变Map操作:简单易懂指南 #Scala Map #Scala
  • CTF 入门指南:从零开始学习网络安全竞赛
  • 数据结构 栈和队列
  • kafka面试题解答(四)
  • 软件测试学习记录 Day1
  • Mysql中数据添加,修改,删除
  • python实战(七)——基于LangChain的RAG实践
  • Simulink对仿真数据进行FFT频谱分析
  • Unity中IK动画与布偶死亡动画切换的实现
  • 【学习记录丨UVM】2.1uvm_component 与uvm_object
  • 人到一定年纪,要学会远离多巴胺