目录
数组翻转
第二种思路:逆序赋值
思路:创建一个新的数组arr2,然后将arr逆序赋值给arr2
arr1是从后往前走
arr2是从前往后走,增加一个新的变量j,j是从0到5;(不用设置范围,有i>=0这个条 限制)
public class ArrayReverse03{
//编写一个main方法
//逆序遍历
public static void main(String[] args){
int[] arr = {11, 22, 33, 44, 55, 66};
int[] arr2 = new int [arr.length];
for(int i = arr.length-1, j = 0; i >= 0; i--, j++){
arr2[j] = arr[i];
}
arr = arr2;//让arr指向arr2的数据空间
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + "\t");
}
}
}
完成第一个循环之后,arr2 就是一个逆序的数组 {66, 55, 44,33,22,11}
数组扩容
要求:
要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java 1) 原始数组使用静态分配 int[] arr = {1,2,3} 2) 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}
代码:
public class ArrayAdd{
public static void main(String[] args){
int[] arr = {1, 2, 3};
int[] arrNew = new int[arr.length + 1];
System.out.print(arr.length + "\t");
System.out.print(arrNew.length + "\t");
for(int i = 0; i < arrNew.length; i++){
if(i == arrNew.length-1){
arrNew[arrNew.length-1] = 4;
}else{
arrNew[i] = arr[i];
}
System.out.print(arrNew[i] + "\t");
}
System.out.println(arrNew.length);
}
}
错误总结:
代码应该是arrNew[i] = arr[i];一开始写的是arrNew = arr;当 arrNew = arr;时,arrNew的长度变成了3,而不是4,arrNew.length-1是2而不是3,所以输出结果为1,2,4
灵活添加:用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
代码如下:
import java.util.Scanner;
public class ArrayAdd02{
public static void main(String[] args){
//编写一个main方法
Scanner myScanner = new Scanner(System.in);
int[] arr = {1, 2, 3};
char answer = ' ';
do{
int[] arrNew = new int[arr.length + 1];
for(int i = 0; i < arr.length; i++){
arrNew[i] = arr[i];
}
System.out.println("请输入你要添加的元素");
int endNum = myScanner.nextInt();
arrNew[arrNew.length-1] = endNum;
arr = arrNew;//将arrNew的地址空间指向arr,arr原有的空间被销毁
System.out.println("====扩容后的数组====");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + "\t");
}
System.out.println("是否继续添加?y/n");
answer = myScanner.next().charAt(0);
if(answer != 'y'){
break;
}
}while(answer == 'y');//死循环,用break跳出循环
System.out.println("停止添加");
}
}
//1.创建数组arr,存放元素1,2,3
//2.创建数组arrNew,长度为arr.length+1
//3.遍历arr数组,依次将其元素的值拷贝给arrNew
//4.将4赋值给数组的最后一个元素,即arrNew[arrNew.length-1]
//输入询问语句,需要Scanner
//是否继续?y/n是一个不确定的因素,通过do..while+break来控制
执行流程:
先执行一次扩容,并且扩容的元素是从控制台输入的
一次扩容后,询问是否继续添加,若输如y以外的任何内容都是退出添加,
若输入y,则进行循环继续扩容
数组缩减
import java.util.Scanner;
public class ArrayReduce{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
char answer = ' ';
int arr[] = {1, 2, 3, 4, 5};
do{
int arrNew[] = new int[arr.length - 1];
for(int i = 0; i < arrNew.length; i++){
arrNew[i] = arr[i];
}
arr = arrNew;
System.out.println("arr缩减后的元素如下");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + "\t");
}
System.out.println("是否继续缩减?y/n");
answer = myScanner.next().charAt(0);
if(answer != 'y'){
break;
}
if(arr.length == 1){
System.out.println("只有一个元素无法再删减");
break;
}
}while(answer == 'y');
System.out.print("退出程序...");
}
}
思路与数组扩容大同小异