数组反转
public class ArrayReverse {
// 编写一个main方法
public static void main(String[] args) {
/*
要求:把数组的元素内容反转
arr {11,22,33,44,55,66} --》 {66,55,44,33,22,11}
思路分析
1.方式一: 通过找规律反转
规律
① 把 arr[0] 和 arr[5] 进行交换 {66,22,33,44,55,11}
② 把 arr[1] 和 arr[4] 进行交换 {66,55,33,44,22,11}
③ 把 arr[2] 和 arr[3] 进行交换 {66,55,44,33,22,11}
④ 一共要交换 3 次 = arr.length / 2
⑤ 每次交换时,对应的下标 是 arr[i] 和 arr[arr.length - 1 - i]
2.方式二: 使用逆序赋值方式
① 先创建一个新的数组 arr2[] , 大小 arr.length
② 逆序遍历 arr ,将每个 元素拷贝到 arr2 的元素中(顺序拷贝)
③ 建议增加一个循环变量 j -> 0 -> 5
*/
// 方法一:
int[] arr = {11,22,33,44,55,66};
int temp = 0;
int len = arr.length;//计算数组的长度
for (int i = 0; i < len / 2; i++){
temp = arr[len - 1 - i];//保存最后一位数
arr[len - 1 -i] = arr[i];//将第一位交换到最后一位
arr[i] = temp;//将保存的最后一位交换到第一位
}
System.out.println("=========交换后");
for (int i = 0; i < len; i++){
System.out.print(arr[i] + "\t");//66,55,44,33,22,11
}
System.out.println();
System.out.println("逆序输出==========");
// 方法二:
int[] arr2 = new int[arr.length];//遍历数组arr
for (int i = len - 1,j = 0; i >= 0; i--,j++){
arr2[j] = arr[i];
}
// ④ 当for循环结束,arr2就是一个逆序的数组 {66,55,44,33,22,11}
// ⑤ 让 arr 指向 arr2数据空间,此时 arr原来的数据空间就没有变量引用,会被当作做垃圾 销毁
arr = arr2;
// ⑥输出 arr 看看
for (int j = 0; j < arr.length; j++){
System.out.print(arr[j]+" ");
}
}
}
数组扩容
import java.util.Scanner;
public class ArrayAdd {
// 编写一个main方法
public static void main(String[] args) {
/*
要求:实现动态的给数组添加元素效果,实现对数组扩容
1. 原始数组使用静态分配 int[] arr = {1,2,3}
2. 增加的元素4,直接放在数组的最后 arr = {1,2,3,4}
3. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续? y/n
思路分析
1. 定义初始数组 int[] arr = {1,2,3} //下标0 - 2
2. 定义一个新的数组 int[] arrNew = new int[arr.length+1]'
3. 遍历 arr 数组,依次将arr的元素拷贝到 arrNew数组
4. 将 4 赋给 arrNew[arrNew.length - 1] = 4;把4赋给arrNew最后一个元素
5. 让 arr 指向 arrNew ; arr = arrNew; 那么 原来arr数组就被销毁
6. 创建一个 Scanner 可以接收用户输入
7. 因为用户什么时候退出,不确定,所以使用 do-while + break 来控制
*/
Scanner scanner = new Scanner(System.in);
int[] arr = {1, 2, 3};
do {
int[] arrNew = new int[arr.length + 1];
// 遍历 arr 数组,依次将arr的元素拷贝到 arrNew数组
for (int i = 0; i < arr.length; i++) {
arrNew[i] = arr[i];
}
System.out.println("请输入你需要添加的元素:");
int addNum = scanner.nextInt();
// 把 addNum 赋给 arrNew 最后一个元素
arrNew[arrNew.length - 1] = addNum;
// 把4赋给arrNew最后一个元素
// arrNew[arrNew.length - 1] = 4;
// 让 arr 指向 arrNew
arr = arrNew;
// 输出 arr
System.out.println("===扩容后元素情况===");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
//问用户是否继续
System.out.println("是否继续添加 y/n");
char key = scanner.next().charAt(0);
if (key == 'n'){
break;
}else {
System.out.print("继续添加,");
}
}while (true);
System.out.println("你退出了程序");
}
}
不是完整的项目,可优化
数组缩减
import java.util.Scanner;
public class Arrayreduce {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
Scanner scanner = new Scanner(System.in);
do {
int[] arrNew = new int[arr.length - 1];
for (int i = 0; i < arrNew.length; i++) {
arrNew[i] = arr[i];
}
arr = arrNew;
System.out.print("已删除最后一项后为:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
if (arr.length < 2) {
System.out.println("不能删除了");
break;
}
System.out.println("你是否继续删减数组 y/n");
char key = scanner.next().charAt(0);
if (key == 'n') {
break;
}
} while (true);
System.out.println("退出程序");
}
}