数组的概念
今天,这个我们来了解一下数组,比如说,我们现在需要录入十名同学的成绩和姓名,那么我们是不是就需要定义10个整型数据类型的变量和十个String型的字符串,来录入数据,这样的话我们就得在代码块输入int a;int b; int c…string p;String q;…很明显这样的话很重复显得很机械且繁琐,所以这个时候我们可以通过数组来进行存放数据。
什么是数组
数组就是可以存放相同数据类型的多个变量的一个容器,一个数组只能存放同一种数据类型,它可以存放基本数据类型也可以存放引用数据类型。
数组的定义格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
举例:
int[] a; 定义了一个int类型的数组a;
int a[]; 定义了一个int类型的a数组;
数组的初始化
数组的初始化:数组必须要先进行初始化然后才能使用,初始化的过程就是先给数组分配空间,然后给数组元素分配初始值;初始化的类型有两种:一种是动态初始化:先指定数组的长度,有系统给出默认值,一种是静态初始化:先给出数组的初始化值,由系统给出长度;两种初始化方式在定义时只能使用一种,不能动静结合,同时使用;
动态初始化的格式
数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
例: int[] arr = new int[3]; 定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。
静态初始化的格式:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例: int[] arr = new int[]{1,2,3};
简化格式:
数据类型[] 数组名 = {元素1,元素2,…};
举例: int[] arr = {1,2,3};
接下来我们用数组来进行数据的录入
public class shuzutest {
public static void main(String[] args) {
int [] a=new int[3];
a[0]=12;
a[1]=13;
a[2]=14;
int [] b={1,2,3};
System.out.println("数组a的值分别是");
for (int i = 0; i <3 ; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println("数组b的值分别是");
for (int j = 0; j <3 ; j++) {
System.out.print(b[j]+" ");
}
}
}
我们用动态初始化定义了数组a,用静态初始化定义了数组b,我们来看一下输出的结果:
这里我们来看一下另一段代码
public class shuzutest {
public static void main(String[] args) {
int [] a=new int[3];
a[0]=12;
a[1]=13;
a[2]=14;
int [] b={1,2,3};
a[2]=b[1];
a=b;//这段代码表示的是将b数组的引用地址值赋值给a;
b[1]=4;
System.out.println(a[2]);
System.out.println(b[1]);
System.out.println(a[1]);
}
}
我们来看一下代码的输出结果;
我们在将b数组地址值赋给a数组之后,我们更改b数组的元素值之后,对应索引的a数组的元素会更改。因为我们在将地址值赋值给另一个数组的时候,我们调用另一个数组其是就是指的是原本数组的空间。嘻嘻嘻,感觉讲的自己都迷茫了,我们来通过Java虚拟机的内存分布来进行理解吧!
这里涉及我们的Java虚拟机里的内存分布,可以看见我们每次数组的创建都伴随着堆内存的空间开辟初始化以及和空间地址值的分配,同一个地址值操作的都是同一个空间;
对数组的基本操作;
Java语言基础
-
数组的操作1遍历
案例演示: 数组遍历:就是依次输出数组中的每一个元素。public class shuzutest { public static void main(String[] args) { int [] a=new int[3]; a[0]=12; a[1]=13; a[2]=14; for (int i = 0; i <3 ; i++) { System.out.println(a[i]); } } }
输出结果:
-
Java语言基础(数组的操作2获取最值)(掌握)A:案例演示: 数组获取最值(获取数组中的最大值或者最小值)
public class shuzutest { public static void main(String[] args) { int [] a=new int[3]; a[0]=12; a[1]=13; a[2]=14; int min=a[0]; int max=a[0]; for (int i = 0; i <3 ; i++) { min=min<a[i]?min:a[i]; max=max>a[i]?max:a[i]; } System.out.println(min); System.out.println(max); } }
输出结果:
- Java语言基础(数组的操作3反转)(掌握)A:案例演示: 数组元素反转(就是把元素对调)
-
class practice3{ public static void main(String [] args){ int arr[]={11,22,33,44,55}; for(int i=0 ;i<3;i++ ){ int a=arr[i]; arr[i]=arr[arr.length-1-i]; arr[arr.length-1-i]=a; } for (int j = 0; j <arr.length ; j++) { System.out.println(arr[j]); } } }
输出结果:
-
Java语言基础(数组的操作4查表法)(掌握)A:案例演示: 数组查表法(根据键盘录入索引,查找对应星期)
import java.util.Scanner; public class shuzutest { public static void main(String[] args) { //ctrl+alt+O 优化导包,没有的包导进来,没有用到的包删掉 //根据元素查索引 String[] arr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"}; Scanner scanner = new Scanner(System.in); System.out.println("请输入1--7的数字"); int num = scanner.nextInt();//获取用户输入的字符串 String index = getIndex(num, arr); System.out.println("该元素是" + index); } private static String getIndex(int num, String[] arr) { //遍历数组 for (int i = 0; i < arr.length; i++) { if (i==num-1) { return arr[i]; } } return "没找到"; // 一般喜欢用 -1 代表没找到 } }
输出结果:
-
Java语言基础(数组的操作5基本查找)(掌握)A:案例演示: 数组元素查找(查找指定元素第一次在数组中出现的索引)
import java.util.Scanner; public class shuzutest { public static void main(String[] args) { //ctrl+alt+O 优化导包,没有的包导进来,没有用到的包删掉 //根据元素查索引 String[] arr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"}; Scanner scanner = new Scanner(System.in); System.out.println("请输入一个星期"); String str = scanner.nextLine();//获取用户输入的字符串 int index = getIndex(str, arr); System.out.println("该元素的索引是" + index); } private static int getIndex(String str, String[] arr) { //遍历数组 for (int i = 0; i < arr.length; i++) { if (str.equals(arr[i])) { return i; } } return -1; // 一般喜欢用 -1 代表没找到 } }
输出结果
以上就是我们对数组的一些基本操作,接下来让我们介绍一下二维数组,并且用二维数组来实现杨辉三角的打印输出。
二维数组的使用以及杨辉三角的打印输出方法
二维数组的格式及定义方法
二维数组格式
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
二维数组可以理解成为我们对数组的一个嵌套使用,就是每一个数组元素的空间它又是一个数组;二维数组我们在解决一些问题是也是经常要用到,所以我们的掌握它的一些基本使用方法;
杨辉三角的打印实现(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
如上这就是一个六层的杨辉三角,我们需要通过程序实现杨辉三角的打印输出,在程序编写之前我们可以先观察这个杨辉三角的构成规律,我们可以发现
A:任何一行的第一列和最后一列都是1
B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
所以我们可以根据这个规律来进行代码的实现:
package method;
import java.util.Scanner;
public class Triangle {
public static void main(String[] args) {
Scanner jc = new Scanner(System.in);
int x = jc.nextInt();
hua(x);
}
private static void hua(int x) {
int[][] a = new int[x][x];
for (int i = 0; i < x; i++) {
for (int j = 0; j <= i; j++) {
a[i][i] = 1;
a[i][0] = 1;
if (i >= 2&&(j>0&&j<i)) {
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
我们可以输出一个七层的杨辉三角来看一下:
这段代码我们是先通过对一个二维数组的数组元素规定后进行遍历的一个实现方法,当然实现的方法多种多样我们还可以通过很多其他的方法实现,大家可以多多练习!