学习java的第十二天。。。(数组)

本文详细介绍了数组的基本操作,包括查询、遍历、查找最大值、增加元素、删除元素,以及冒泡排序的实现。同时,展示了如何使用Java的Arrays类进行数组的比较、排序、转换和填充。此外,还提供了Arrays类中常用方法的示例,如equals、toString、fill、copyOf和binarySearch。
摘要由CSDN通过智能技术生成

数组的常用操作

查:

查询数组里的某个元素

很简单,System.out.println(nums[3]);

遍历数组:按照元素在数组中的顺序,依次输出所有的元素

for(int i=0;i<nums.length;i++){
System.out.print(nums[i]);
}

找出数组中的最大(小)值

以找最大值为例

思路

①假设数组中的第一个元素的最大值

②依次取出后面的元素与假设的最大值进行比较,如果后面的元素比假设的最大值大,取代它成为新的最大值,如果比假设的最大值小,不进行替换,继续向后比较

③一直比较到最后一个元素,就可以获得数组中的最大值

例:输出五位同学的分数,并输出最高分数

        public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double[] scores = new double[5];
		double max = scores[0];
		for (int i = 0; i < scores.length; i++) {
			System.out.println("请输入第" + (i + 1) + "位同学的分数");
			scores[i] = sc.nextDouble();
			if (scores[i] > max) {
				max = scores[i];
			}
		}
		System.out.println("最高分为" + max);
	}

增:

①新建一个比原来数组长度大1的数组(长度按照插入的数据个数定)

②将原来数组里的元素按照顺序,存储到新的数组中

③使用Scanner获取要增加的数据

④通过循环比较获取要插入的位置

⑤从插入位置开始及之后的元素依次往后移动

 必须是后面的元素先往后移前面的才往后移

比方说原来的数组i下标为4,新的数组j的下标就为5,J[5]在赋值的时候没有参与,所以它是默认的数值0,所以这里就是先从j[4]最先开始向后移,然后前面的依次向后移。

 例:有一组学员的成绩{99,85,82,63, 60},将它们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序

        int[] scores = { 99, 85, 82, 63, 60 };
		// 1)新建一个比原来数组长度大1的数组
		int[] newscores = new int[scores.length + 1];
		// 2)将原来数组里的元素按照顺序,存储到新的数组中
		for (int i = 0; i < scores.length; i++) {
			newscores[i] = scores[i];
		}
		//3)使用Scanner获取要增加的学员的成绩
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入增加的学员的成绩:");
		int add = sc.nextInt();
		// 4)通过循环比较获取要插入的位置
		int index = newscores.length-1;//如果是index=0的话;就说明默认是放在第一位的,此时输入一个小于0的数,该数没有进入判断,index就默认是0,会出现在第一个,所以把它的默认位置设为最后一个
		for (int i = 0; i < newscores.length; i++) {
			if (add > newscores[i]) {
				index = i;
				//一旦获取插入元素比某一个元素大,就不在往后进行比较了,结束整个比较过程
				break;
			}
		}
		//5)从插入位置开始及之后的元素依次往后移动
		for (int i = newscores.length - 1; i > index; i--) {
			newscores[i]=newscores[i-1];
		}
		newscores[index]=add;
		for(int i=0;i<newscores.length;i++){
			System.out.print(newscores[i]+" ");
		}

 

 注意这一行代码,规定的是index的默认位置,这里一开始写的是0,这样的话如果输入的是一个负数,由于最后一个元素默认是0,负数小于0,也就是没有进入if循环,这样的话idenx就没有重新赋值,index默认是0,这样的话就会在新的数组中成为下标为0的元素,所以就要把index的初始值设为newscores.length-1(不能是newscores.length这样的话会出现数组越界异常)

删:

删除指定位置的元素

从删除位置之后的元素依次往前移动一位,最后一位元素值赋予对应类型的初始值

最后一位元素值赋予对应类型的初始值,只有当删除位置处于0-6之间的时候删除元素才会操作


		// 删除数组里的元素
		int[] nums = { 11, 22, 45, 35, 88, 78, 99 };
		System.out.print("删除元素之前的数组");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + " ");
		}
		System.out.println();
		// 删除指定位置的元素
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要删除的元素位置(0-6)");
		int index = sc.nextInt();
		// 从删除位置之后的元素依次往前移动一位,最后一位元素值赋予对应类型的初始值
		for (int i = index; i < nums.length - 1; i++) {
			nums[i] = nums[i + 1];
		}
		// 最后一位元素值赋予对应类型的初始值,只有当删除位置处于0-6之间的时候删除元素才会操作
		if (index >= 0 && index < 7) {
			nums[nums.length - 1] = 0;
		}
		System.out.print("删除元素之后的数组");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + " ");
		}
		
	

冒泡排序

每次比较相邻两数,小的交换到前面,每轮结束后最大的数交换到最后

如这样的一个数组[11,5,80,25,62],可以发现第一轮,比较了4次,第二轮,比较了3次,第三轮,比较了2次,第四轮:比较了1次

这样就可以想到之前使用双重循环结构输出图形,外层循环控制行,内层循环控制列。在这里面是外层循环控制比较轮数,内层循环控制比较次数。

for (int i = 0; i < num.length; i++) {
 for (int j = 1; j < num.length-i; j++) {
    if(num[j]>num[j-1]){
    int temp=num[j];
    num[j]=num[j-1];
    num[j-1]=temp;
    }
 }
}

Arrays类

使用java.util.Arrays类

boolean equals(array1,array2)------比较array1和array2两个数组是否相等

sort(array)------对数组array的元素进行升序排列

String toString(array)------将一个数组array转换成一个字符串

void fill(array,val)------把数组array所有的元素都赋值为val

copyOf(array,length)---把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致

int binarySearch(array,val)----查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)

        // Arrays类里常用的方法
		//boolean equals(array1,array2):比较两个数组是否相同,如果相同返回true,不相同返回false
		int[] i={11,22};
		int[] j={22,11};
		boolean result=Arrays.equals(i, j);
		System.out.println(result);
		
		//String Arrays=String toString(array):将数组转换成字符串
		int[] k={11,22};
		String str=Arrays.toString(k);
		System.out.println(str);
		System.out.println(Arrays.toString(k));
		
		//void fill(array,val):将数组里的所有元素的值替换成指定val值
		int[] l ={11,22,33};
		System.out.println(Arrays.toString(l));
		Arrays.fill(l, 77);
		System.out.println(Arrays.toString(l));
		
		//copyOf(array,length):把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
		int[] p = {11,12,13};
		int[] p1=Arrays.copyOf(p,p.length+1);
		System.out.println(Arrays.toString(p1));
		
		//int binarySearch(array, val):查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)
		int[] o={11,22,33,44,55};
		int x= Arrays.binarySearch(o,44);
		System.out.println("下标是:"+x);
	

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放在糖果旁的是我很想回忆的甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值