2022-07-16 第五小组 孔海波 学习笔记
作者:互联网
今日学习情况:掌握
心情:100%(明天放假!!!)
今天学习了关于数组的各种案例,感觉还挺好。
Java基础
——数组案例
今天我们来看一看一些数组的案例,加强一下我们对数组以及我们对过去知识的掌握。
案例一
输入下标,输出对应数组的数字
这个题比较简单,我们来分析一下:我们在控制台是输出提示信息,用户输入需要的查询的数组元素的下标。当接受到用户输入的数字后我们首先要判断这个下标是否越界,如果越界我们输出一些提示信息去提示用户,如果下标合法我们就直接输出对应下标的元素。下面就是代码的实现。
import java.util.Scanner;
public class Java02 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] arr = new int[]{9, 61, 3, 9, 61, 5, 35, 4, 68};
System.out.println("请输入一个下标");
while (true) {
int index = in.nextInt();
if (index > arr.length - 1 || index < 0)
System.out.println("你输入的数组下标越界!数组最大下标为" + (arr.length - 1) + "请重新输入:");
else {
System.out.println("你输入的下标是:" + index + ",a[" + index + "] = " + arr[index]);
break;
}
}
}
}
下面我们输入两个越界的下标测试一下:
最后我们输入一个合法的下标来试一试。
成功运行。
案例二
将用户的数倒序输入数组
emmm...正常数组都从头开始输入,怎么才能倒序输入呢?我们先看看一下正常输入数组是什么原理:对数组赋值的时候我们通常使用循环,从数组下标为0开始赋值,一直到数组下标为数组长度减一结束。那么逆序输入就是从后面开始输入嘛,也就是从数组下标为数组长度减一开始到数组下表为0结束。我们只要将循环开始的初始值赋为arr.lenth - 1就可以了。然后每次长度就减一,当循环遍量小于0后就结束循环。好了分析就到这里,我们来看一下代码实现:
public class Java03 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] arr = new int[5];
for (int i = arr.length - 1; i >= 0 ; i--) {
System.out.println("请输入第"+ (arr.length - i) +"个数:");
arr[i] = in.nextInt();
}
System.out.println("输入完成!arr[5]中的数是:");
for (int i: arr) {
System.out.print(i + " ");
}
}
}
案例三
数组的动态扩充
就这个就是在对数组赋值时,如果数组已经满了以后我们还要对其进行添加数据,那么我们就会对其进行扩充。其实这个案例并不难,我们在对数组进行赋值之前可以判断一下,如果数组已经满了我们就对其进行扩容,随后继续赋值操作。但是怎么判断数组是否已经满了呢?在这里我们可以定义一个int类型的变量num
来存储数组中元素的个数,它的初始值是0,当我们每次赋值以后我们就把它加1,这样我们就有了数组元素的个数。然后我们用数组元素个数num
和数组最大长度arr.length
进行比较,就可以知道数组是否满了。
下面我们就对数组进行扩充,我们先定义一个临时的数组temp
,他的长度是原来数组长度的二倍,随后我们将原数组中数组元素逐个赋值到临时数组中temp
,最后我们再将临时数组赋给原来的数组arr
这就完成了对数组容量的扩充。下面我们来看看具体的代码实现:
import java.util.Arrays;
import java.util.Scanner;
public class Java04 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] arr = new int[5];
int i = 0;
while (true) {
if (i == arr.length) {
int[] temp = new int[2 * arr.length];
for (int j = 0; j < arr.length; j++) {
temp[temp.length - 1 - j] = arr[arr.length - j - 1];
}
arr = temp;
}
System.out.println("请输入第"+ (i + 1) +"个数:");
arr[arr.length - 1 - i] = in.nextInt();
i++;
System.out.println("是否继续添加?(1 继续, 其他结束");
int tem = in.nextInt();
if (tem != 1) {
System.out.println(Arrays.toString(arr));
break;
}
}
}
}
下面我们来测试一下
我们数组的原始长度是5,输出发现长度变成了10,成功!这里还是逆序输入,具体算法我们下一个实例再看。
案例四
把一个数组插入到另一个数组的指定位置
一个数组插入到另一个数组势必会导致数组长度的增加,所以这也涉及数组容量的扩充,只不过这次不用扩充二倍,只需要增加第二个数组的长度的容量就行了。
我们再扩充被插入的数组arr1
时要把他的长度oldArrlength
保存下来,后面有妙用。然后arr1
扩充后数组多出 arr2
长度的容量。假设我们在arr1
的第i
个位置中插入arr2
。那么从arr1
从第i个位置开始往后所有的元素都要往后移动arr.length
个位置,因为后面还有啊arr.lengt
h个位置。这样arr1
从i开始就有arr2.length
个空位,我们把放入就行了。我们怎么知道i位置后有多少元素呢?这就用到oldArrlength
啦,这就是妙用。有了原始数组的长度我们就知道i位置后有多少元素啦。剩下的就没有难度了,对号入座赋值就行了,下面我们看看代码如何实现。
import java.util.Arrays;
import java.util.Scanner;
public class Test06work {
public static void main(String[] args) {
int[] arr1 = new int[]{1, 2, 3, 4, 5, 6, 7};
int[] arr2 = new int[]{9, 9, 9, 10, 10};
System.out.println("请输入你要把arr1插入到arr2的的位置(0 - 7)");
Scanner in = new Scanner(System.in);
int index = in.nextInt();
int oldArr1length = arr1.length;
int[] temp = new int[arr1.length + arr2.length];
for (int i = 0; i < arr1.length; i++) {
temp[i] = arr1[i];
}
arr1 = temp;
int i = 1;
while (true){
if(index == 7){
for (int j = 0; j < arr2.length; j++) {
arr1[oldArr1length + j] = arr2[j];
} break;
}
arr1[arr1.length - i] = arr1[oldArr1length - i];
if (index == (oldArr1length - i)){
for (int j = 0; j < arr2.length; j++) {
arr1[index + j] = arr2[j];
}
break;
}
i++;
}
System.out.println(Arrays.toString(arr1));
}
}
我们插入第三个元素前面。
完美!!!
标签:arr,07,16,int,System,length,2022,数组,arr1 来源: https://www.cnblogs.com/wubishurufa/p/16485321.html