内容纲要
163讲数组赋值机制、数组拷贝、反转、扩容缩减。
值拷贝、引用赋值
jvm中的地址拷贝
数组的拷贝
- 创建一个新的数组arr2[], 给它分配一个地址空间,遍历arr1[]拷贝给arr2[]
数组的翻转
- 老韩方法
//法2
public class ArrayRerverse{
public static void main(String[] args){
//使用逆序赋值方式
//arr{11, 22, 33, 44, 55, 66},
int[] arr = {11, 22, 33, 44, 55, 66};
int[] temp = new int[arr.length];
for(int i = 0;i <= (arr.length - 1);i++){
temp[i] = arr[arr.length - i - 1];
System.out.println(temp[i] + "\t");
}
}
}
数组的扩容
public class ArrayAdd{
public static void main(String[] args){
int[] arr = {1, 2, 3};
arr[3] = 4;
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i] + "\t");
}
}
}
//这个代码有问题。蹦年arr[3] = 4; 溢出报错。
package main.dayone;
import java.util.Scanner;
public class ArrayAdd {
public static void main(String[] args) {
/*
* 有一个数组{1,2,3,4,5},可以将该数组进行增加,提示用户是否继续增加
* */
Scanner myScanner = new Scanner(System.in);
int[] array = {1,2,3,4,5};
do{
//初始化数组 以及数组的拷贝
int arrayNew[] = new int[array.length + 1];
for(int i = 0;i < array.length;i++){
arrayNew[i] = array[i];
}
//增加的元素
System.out.println("请输入增加的数:");
int count = myScanner.nextInt();
arrayNew[arrayNew.length - 1] = count;
array = arrayNew;
//回显arrayNew的数组元素
for(int num : array){
System.out.print("\t" + num);
}
//循环提示是否增加元素
System.out.println("是否继续增加:y/n?");
char c = myScanner.next().charAt(0);
if(c != 'y'){
break;
}
}while(true);
}
}
数组的缩减
package main.dayone;
import java.util.Scanner;
public class ArrayReduce {
public static void main(String[] args) {
/*
* 有一个数组{1,2,3,4,5},可以将该数组进行缩减,提示用户是否继续缩减
* 每次缩减最后那个元素,当只剩下最后一个元素,提示不能再缩减。
* */
//思路分析:定义一个数组,使用for循环实现数组的迭代。
//外层嵌套for或者while,do-while循环来判断是否缩减。
//外层循环后面使用if语句判断用户是否继续缩减。
int[] arr = {1,2,3,4,5,6,9,8};
Scanner myScanner = new Scanner(System.in);
for(;;){ //可以使用无限循环;但是要在后面定义一个if使得arr.length == 1中止循环
int[] arrNew = new int[arr.length - 1];
for(int i = 0;i < arr.length - 1;i++){
arrNew[i] = arr[i];
}
for(int num : arrNew){
System.out.print("\t" + num);
}
arr = arrNew;
if(arr.length == 1){
break;
}
System.out.println("\n" + "是否需要再缩减:y/n?");
char c = myScanner.next().charAt(0);
if(c != 'y'){
break;
}
}
}
}