1. 数组
1.1定义数组
int[] arr = new int[]{20,5,100,30,5}
int[] arr = {20,5,100,30,5}
int arr[] = new int[4];//源码中经常会看到的定义方式
数组定义格式:
数据类型[] 数组名 = new 数据类型[数据长度/元素个数];
访问数组中指定编号的元素:数组名[索引]
给数组中的元素赋值: 数组名[索引] = 数据值;
使用数组名.length可以获取数组长度。
直接打印数组名是获取了数组的堆内存地址值(内存图详细了解)
数据类型 | 默认初始化值 |
byte、short、int、long | 0 |
float、double | 0.0 |
char | 一个空字符(空格),即’\u0000’ |
boolean | false |
引用数据类型 | null,表示变量不引用任何对象 |
//1.数据类型[] 数组名 = new 数据类型[数据长度/元素个数];
int[] arr1 = new int[3];//定义一个长度为3的数组1
//int[] arr2 = new int[]{1,2,3,4,5};
int[] arr2 = {1,2,3,4,5};//索引0 1 2 3 4
//2.访问数组中指定编号的元素:数组名[索引]
System.out.println("数组的第一个元素:" + arr2[0]);
int x = arr2[0];//获取组中元素
System.out.println("数组的第一个元素:" + x);
//3.给数组中的元素赋值: 数组名[索引] = 数据值;
arr2[1] = 100;
System.out.println("arr2[1]:" + arr1[1]);
//4.使用数组名.length可以获取数组长度。
int length1 = arr1.length;
System.out.println("数组arr1的长度:" + length1);
int length2 = arr2.length;
System.out.println("数组arr2的长度:" + length2);
//5.直接打印数组名是获取了数组的堆内存地址值
System.out.println(arr1);
System.out.println(arr2);
char[] ch = new char[4];
System.out.println(ch);//[I@3fa5ac
1.2 数组遍历
int[] arr = {1,2,3,4,5);//定义数组
for(int i=0; i<arr.length; i++) {//for循环遍历数组元素
System.out.println(arr[1]);//通过索引访问元素
}
例1:数组遍历
String[] arr = {"a","b","c"};//定义数组
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
for(int i=0; i<4; i++) {
System.out.println(arr[i]);
}
//或者
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
/*
一个String数组中存储一些人名,奇偶报数
String[] arr = {“a”,”b”,”c”,”d”};
奇数同学为: a,c
偶数同学为: b,d
*/
String name1 = "奇数同学为:";
String name2 = "偶数同学为:";
for(int i=0; i<arr.length; i++) {
if(i%2 == 0) {
name2 = name2 + "" + arr[i];//输出:"偶数同学为:" + "+" + "a" + "c"
} else {
name1 = name1 + "" + arr[i];//输出:"偶数同学为:" + "+" + "b" + "d"
}
}
System.out.println(name1);
System.out.println(name2);
例2:数组遍历
int[] arr = {11,22,33,44}
for(int x=0; x<4; x++) {
System.out.println(arr[x]);
}
System.out.println("数组共有:" + arr.length + "个元素");
for(int x=o; x<arr.length; x++) {
System.out.println(arr[x]);
}
例3:比大小
//思路:定义第一个元素为参照物,后面的每个元素和参照物比较。大于参照物就留下来
//定义数组
int[] arr = {1,2,3,4,5};
//定义参照物
int max = arr[0];
//遍历数组,获取0以外元素
for(int x=1; x<arr.length; x++) {
if(arr[x] >max) {
max = arr[x];
}
}
System.out.println("数组中的最大值是:" + max);
1.3二维数组
-
二维数组定义格式
-
数据类型[][] 数组名;
-
数据类型 数组名[][]; 不推荐
-
数据类型[] 数组名[]; 不推荐
-
-
初始化方式
-
数据类型[][] 变量名 = new 数据类型[m][n];
-
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
-
简化版格式:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
-
int[][] arr = {{1,2,3},{10,20,30},{100,200,300}};
System.out.println(arr);
System.out.println(arr.length);
System.out.println(arr[0]);
System.out.println(arr[0].length);
System.out.println(arr[1]);
System.out.println(arr[2]);
//获取二维数组的元素
System.out.println(arr[0][0]);
System.out.println(arr[1][1]);
System.out.println(arr[2][0]);
1.3.1二维数组的访问
//定义一个长度为3,每个数组元素都是一个长度为4的数组的二维数组
int[][] arr = new int[3][4];
System.out.println(a);
System.out.println(a.length);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
//访问二维数组中的第一个元素的第一个值
System.out.println(a[0][0]);//0
//赋值
a[0][0] = 100;
System.out.println(a[0][0]);//100
int[][] b = {{1,2},{3,4,5,6},{7,8,9}};
System.out.println(b);//
System.out.println(b.length);//3
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(b[2]);
System.out.println(b[0][0]);//1
System.out.println(b[2][2]);//9
int[][] c = new int[3][];
System.out.println(c);
System.out.println(c.length);//3
System.out.println(c[0]);//null
System.out.println(c[1]);//null
System.out.println(c[2]);//null
//System.out.println(c[0][0]);//NullPointerException
c[0] = new int[]{1,2,3};
System.out.println(c[0][0]);//1
1.3.2二维数组的遍历
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
for(int y=0; y<arr.length; y++) {
for(int x=0; x=arr[y].length;x++) {
System.out.println(arr[y][x] + "");
}
System.out.println();//换行
}
/*
输出:
1 2 3
4 5 6
7 8 9
*/
1.4练习
1.4.1随机点名器
import java.util.Random;
public class Test {
public static void main(String[] args) {
//存储所有同学姓名->String
String[] names = {"a","b","c","d","e");
//总览全班同学姓名->遍历数组
for(int i=0; i<names.length; i++) {
System.out.println("第" + (i+1) + "个同学的姓名是:" + names[i]);
}
System.out.print("全班同学姓名:");
for(int i=0; i<names.length; i++) {
System.out.print("" + names[i]);
}
//随机点名->Random类
Random r = new Random();
int number = r.nextInt(name.length);//长度为5
String name = names[number];//0 1 2 3 4
System.out.println("随机点到的同学姓名是:" + name);
}
}
2.斐波那契数列(兔子)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
//定义数组
int[] arr = new arr();
//初始化第一个月和第二个月兔子的对数
arr[0] = 1;
arr[1] = 1;
//从第三个月开始,每个月的兔子对数是前两个月的兔子对数之和
for(int x=1; x<arr.length; x++) {
arr[x] = arr[x-2] + arr[x-1];
}
//打印
System.out.println("第二十个月的时候兔子对数是:" + arr[19]);
//自java帮帮