Java基础---Java基本语法---跳转控制语句---数组---遍历---最值---查找---排序---五

跳转控制语句

break(在switch语句里用于结束语句 在循环里使用,结束当前循环)
continue(跳过当次循环)
return(方法时讲)

数组

可以存储多个相同数据类型元素的容器
定义格式
1.数据类型[] 数组名=new 数据类型[元素个数/数组长度]

int[] arr=new int[3];//指定长度

数据类型 名称=初始化;//定义变量
变量定义分为声明和初始化两个过程
可以分为声明和初始化两个过程
通过唯一的内存地址值(数组名)来确定数组,Java自动给数组元素编号(下标)
从0开始。由内存地址值和下标就能唯一确定数组里元素—数组名[下标]

/*
	数组的定义
*/
class ArrayDemo{
	public static void main(String[] args) {
		//1.定义数组
		int[] arr=new int[3];
		//声明
		int[] arr1;
		//初始化
		arr1=new int[5];
		//输出数组名
		System.out.println(arr);
	}
}

输出结果:
在这里插入图片描述
在这里插入图片描述2.数据类型[] 数组名=new 数据类型[]{元素值1,元素值2,…};

int[] arr=new int[]{1,2,3};//给定数组元素值来确定长度不用给定长度值

可以分为声明和初始化两个过程
3.数据类型[] 数组名={元素值1,元素值2,…};

int[] arr={1,2,3};//给定元素值长度确定

在这里插入图片描述new—开辟内存空间

Java的内存
栈:存储的是变量(暂且),当存储内容使用完毕之后会立即清除。
堆:存储的是对象,当存储内容使用完毕之后等到某个时刻来进行回收,会被赋予系统默认初始值。
方法区
本地方法栈
寄存器

系统默认初始值
(byte、short、int–系统默认初始值都为0)
(char—’\u0000’ \u代表以u16进行编码)
(long—0L)
(float—0.0F)
(double—0.0)
(boolean—false)
(引用数据类型—null)
在这里插入图片描述在这里插入图片描述在这里插入图片描述数组应用
1.遍历—依次把数组元素进行输出
2.最值—求出数组元素的最大/小值
3.查找—给定查找数返回数组第一次出现下标值
4.排序—给元素值排列顺序 冒泡、选择
5.扩容—数组定义完成长度无法改变

数组遍历

/*
	数组遍历
*/
import java.util.Arrays;
class ArrayBianLi{
	public static void main(String[] args) {
		//定义数组
		int[] arr={2,4,1,6,9,5};
		//普通for循环实现遍历、
		//数组名.length---返回数组长度值
		/*for(int i=0;i<arr.length;i++){//下标范围
			System.out.println(arr[i]);
			
		}*/
		//增强for循环
		//(元素类型 变量名:要去遍历的数组名)
		//把数组元素拷贝赋值给新变量来输出新变量值
		/*for(int i:arr){
			System.out.println(i);
			
		}*/
		//展示数组元素内容---遍历输出
		System.out.println(Arrays.toString(arr));
		
	}
}

在这里插入图片描述在这里插入图片描述数组最值

/*
	数组最值
*/
class ArrayMaxDemo{
	public static void main(String[] args) {
		//定义数组
		int[] arr={4,8,9,6,5,1};
		//选取第一个
		int max=arr[0];
		//遍历
		for(int i=1;i<arr.length;i++){//下标范围
			if(arr[i]>max){
				max=arr[i];
			}
		}
		System.out.println(max);
	}
}

在这里插入图片描述数组查找

/*
	数组查找
*/
class ArraySearchDemo{
	public static void main(String[] args) {
		//定义数组
		int[] arr={1,7,3,2,5,8};
		/*//给定查找数
		int num=5;
		//遍历数组,依次比较(增强for实现)
		for(int i=0;i<arr.length;i++){
			if(arr[i]==num){
				System.out.println(i);
				//已经查找下标---结束循环
				break;
			}
		}*/
		//二分查找
		//提供三个下标
		int min=0;
		int max=arr.length-1;
		int mid=(min+max)/2;

		//给定查找数
		int num=5;
		
		//循环范围不确定
		while(arr[mid]!=num){//中间下标对应的元素值和查找数不相等
			//如果num大于中间下标对应的元素值
			if(num>arr[mid]){
				min=mid+1;
			}
			//如果num大于中间下标对应的元素值
			if(num<arr[mid]){
				max=mid-1;
			}

			//查找数不在数组判断条件
			if(min>max){
				System.out.println("查无此数");
				//结束循环
				break;
			}
			//重新计算中间下标
			mid=(min+max)/2;
		}
		//输出
		if(max>=min)
		System.out.println(mid);
		
	}
}

在这里插入图片描述在这里插入图片描述冒泡排序

/*
	冒泡排序
*/
import java.util.Arrays;
class ArrayMaoDemo{
	public static void main(String[] args) {
		//定义数组
		int[] arr={6,1,7,3,9,2};
		//通过嵌套循环实现
		for(int i=1;i<arr.length;i++){//外层循环-控制轮数
			for(int j=1;j<=arr.length-i;j++){//内存循环-控制参与比较的元素比较的元素范围
			//两两比较
			//升序排序---小的在前面
			if(arr[j-1]>arr[j]){
				//交换值
				int temp=arr[j-1];
				arr[j-1]=arr[j];
				arr[j]=temp;
			}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

选择排序

/*
	选择排序
*/
import java.util.Arrays;
class ArrayCheeseDemo{
	public static void main(String[] args) {
		//定义数组
		int[] arr={6,1,7,3,9,2};
		//通过嵌套循环实现
		for(int i=1;i<arr.length;i++){//外层循环--控制轮数
			for(int j=i;j<arr.length;j++){//内存循环---控制参与比较元素范围
				//选择定点元素和后续元素进行比较
				//升序排序---小的在前面
				if(arr[i-1]>arr[j]){
					//交换值
					int temp=arr[i-1];
					arr[i-1]=arr[j];
					arr[j]=temp;
				}
			}
		}
		//输出
		System.out.println(Arrays.toString(arr));
	}
}
/*
	数组扩容
*/
import java.util.Arrays;
class ArrayKuoDemo{
	public static void main(String[] args) {
		//定义原数组
		//int[] arr={1,2,3,4,5};
		//根据新数组之间的复制来实现扩容
		//复制很灵活(给定起始位置)但是使用麻烦
		//新数组()
		//int[] arr1=new int[2*arr.length];//确定扩容之后的长度
		//(原数组,原数组的起始下标,新数组,新数组起始位置,元素个数)
		//System.arraycopy(arr,0,arr1,0,arr.length);
		//新数组地址值覆盖原数组的地址值
		//arr=arr1;

		//由上述三步实现的
		//使用简单,但是只能从头(下标0)开始复制(不灵活)
		//(原数组,新数组长度)
		arr=Arrays.copyOf(arr,2*arr.length);
		
		//输出
		System.out.println(Arrays.toString(arr));	
	}
}    

二维数组
存储元素是一组一维数组的数组
定义格式
1.数据类型[][] 数组名=new 数据类型[二维数组长度/一维数组个数][每个一维数组长度];

int[][] arr=new int[2][3];
/*
	定义格式
*/
class Array2Demo{
	public static void main(String[] args) {
		//1.定义格式
		/*int[] arr=new int[2];
		arr[0]*/
		int[][] arr=new int[3][2];
		//数组名 二维数组地址值---[[I@2a139a55
		System.out.println(arr);
		//二维数组第一个元素 一维数组地址值---[I@15db9742
		System.out.println(arr[0]);
		//第一个一维数组的一个元素
		System.out.println(arr[0][0]);
	}
}

2.数据类型[][] 数组名=new 数据类型[二维数组长度/一维数组个数][]

int[][] arr=new int[3][];//声明3个一维数组
//初始化
arr[0]=new int[4];
arr[1]=new int[]{1,2,3};
arr[2]={3,4,5};//没有开辟空间无法存储数据
//2.定义数组
		int[][] arr=new int[2][];//声明两个一维数组
		//第一个一维数组
		System.out.println(arr[0]);//null(不指向任何内存区域)
		//NullPointerException---空指针异常
		//从地址值为null的引用里获取信息就报错
		System.out.println(arr[0][0]);

3.数据类型[][] 数组名 ={{元素值1,元素值2,…},{{元素值1,元素值2,…}…};

int[][] arr={{1,2,3},{4,5}};
//3.定义格式
		int[][] arr={{1,2,3},{3,4}};
		//第一个一维数组的第四个元素---ArrayIndexOutOfBoundsException
		//数组下标越界异常
		//给定下标超过下标范围报错
		System.out.println(arr[0][3]);

猜你喜欢

转载自blog.csdn.net/weixin_46883950/article/details/107809022