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);