栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

数组的常用操作 查: 查询数组里的某个元素

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

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

for(int i=0;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 

 

 注意这一行代码,规定的是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);
	

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027161.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号