Java基础复习(三)

Java基础复习(三)

数组

1.一维数组

定义一个数组:
数据类型 [ ] 数组名 = new 数据类型 [ 数组长度 ];

数组的初始化:
在定义数组的同时一并完成赋值操作
数据类型 [ ] 数组名 = { 值1,值2,值3…值n };

遍历数组的方法:
增强for循环的语法:
for(元素类型 变量名 :要循环的数组或者集合的名字 ){ }
第一元素类型是数组或者集合中的元素类型,变量名在循环的时候用来保存每个元素的值。

// 1.for循环遍历法
// 初始化一个数组
int[] numbers = {10,7,8,6,0,3,5};
for(int i = 0; i < numbers.length; i++){
	System.out.println(numbers[i]);
} 
// 2.使用增强for循环foreach
for(int i : numbers){
	System.out.println(i);
}

数组的改删

// 1.数组的修改
/*有一个数组,保存了4个人名,要求编写程序实现姓名查询功能
		要求:从控制台输入一个姓名,程序在数组中查找,如果找到了,输出“找到了!该姓名的下标为XX”
		如果找到了要替换的姓名,将用户输入的新名字,保存到该位置上,并有相应的提示信息
		如果没找到,输出“对不起,没有找到要替换的姓名!”*/
import java.util.Scanner;
String[] names = {"张三","李四","王五","刘军"};
Scanner input = new Scanner(System.in);
System.out.println("请输入需要替换的姓名:");
String name = input.next();
for(int i = 0;i < names.length; i++){
	if(names[i].equals(name)){
		System.out.println("找到了,改姓名的下标为:"+i);
		System.out.println("请输入新姓名:");
		String newName = input.next();
		names[i] = newName;
		System.out.println("替换成功!");
		for(String str : names){
			System.out.println(str);
		}
	}else{
		break;
	}
	System.out.println("对不起,没有找到要替换的姓名!");
}

// 2.数组的删除

// 初始化一个数组
String[] phones = {"华为mate30","小米9","苹果11","三星note10"};
/*
现在要求删除第3个手机,删除完后,数组仍然要求依次存放,中间不能出现断档。最后一个元素位置置为 null
*/
	phones[2] = phones[phones,length - 1];
	phones[phones,length - 1] = null;
for(String name : phones){
	System.out.println(name);
}

2.数组元素的排序

// 1.冒泡排序
// 内部原理:
int[] numbers2 = { 6, -8, 0, 8, -6, 9, -7 };
	public void sort() {
		for (int i = 0; i < numbers2.length - 1; i++) {
		//外层for循环的作用控制这个数组总共需要进行多少次循环后可以排序成功
			for (int k = 0; k < numbers2.length - i - 1; k++) {
				// 内层for循环的作用:每一次循环都将数组的大值排至正确的位置
				// 例如,第一轮大循环(指外层循环)会将这个数组的最大值确定出来,并且将其移动至此数组最末尾
				// 第二次大循环将这个数组的第二大的值确定出来,并且将其移动至此数组的倒数第二的位置
				// 以此类推将数组排序成功
				if(numbers2[k]>numbers2[k+1]){
					int temp = numbers2[k];
					numbers2[k] = numbers2[k+1];
					numbers2[k+1] = temp;
			}
		}
	}
	
// 此排序方法效率低下!

// 2.插入排序
// 内部原理:
int k[] = { 3, 4, 5, 2, 1, 0 };
		int count = 0;
		for (int i = 1; i < k.length; i++) {
		// 外层循环从1开始的原因,因为是用前面的值比较后面的值,所以下标为0的数已经被比较过了
			for (int j = i; j > 0; j--) {
				// 内层循环是k[j] < k[j - 1]这样比较,如果前面的值大于后面的值,就调换位置
				// 即将那个较大的数往后放
				count++;
				if (k[j] < k[j - 1]) {
					int temp = k[j - 1];
					k[j - 1] = k[j];
					k[j] = temp;
				} else {
					break;
				}
			}
		}

// 3.选择排序法
		int k[] = { 3, 4, 5, 2, 1, 0 };
		int count = 0;
		for (int i = 0; i < k.length - 1; i++) {
			int min = i;
			for (int j = i + 1; j < k.length; j++) {
				count++;

				if (k[min] > k[j]) {
					min = j;
				}
				if (min != i) {
					int temp = k[i];
					k[i] = k[min];
					k[min] = temp;
				}

			}
		}
		System.out.println("选择排序:");
		for (int i = 0; i < k.length; i++) {
			System.out.print(k[i] + " ");
		}
		System.out.println("\n" + count);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值