1.二维数组
- 二维数组的定义:数组元素是一维数组的数组(数组中保存的是数组)
- 二维数组的定义(动态初始化):
//定义了一个int类型的二维数组,这个二维数组包含了两个长度为3的一维数组
int[][] arr = new int[2][3]
- 注意:一维数组的长度,可以写也可以不写,写与不写是有区别的:
- 写上后,在创建二维数组时,也会初始化二维数组中存放的一维数组
- 不写的话,就不会去初始化一维数组
(1)定义了一维数组的长度
int[][] arr = new int[3][2];
//取出二维数组中的一个元素
int[] minArr = arr[0];
System.out.println(minArr); //[I@3f99bd52
System.out.println(arr[1]); //[I@4f023edb
System.out.println(arr[2]); //[I@3a71f4dd
//取出二维数组中的每一个一维数组中存的值
int one = arr[1][0];
int two = arr[1][1];
System.out.println(arr[1][0]); //0
System.out.println(arr[1][1]); //0
(2)未定义一维数组的长度
int[][] arr = new int[2][];
System.out.println(arr[0]); //null
System.out.println(arr[1]); //null
3. 二维数组的赋值
int[][] arr=new int[2][2];
arr[0][0]=10;
arr[0][1]=20;
arr[1][0]=100;
arr[1][1]=200;
System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[1][0]);
System.out.println(arr[1][1]);
- 骚操作:把一维数组放进二维数组中
//创建一个二维数组
int[][] arr = new int[2][];
//创建两个一维数组
int[] minArr1 = new int[3];
int[] minArr2 = new int[2];
//把两个一维数组存到二维数组中
arr[0] = minArr1;
arr[1] = minArr2;
- 二维数组的定义(静态初始化):
//静态初始化
int[][] arr = {{10,20},{30,40},{50,60}};
//获取最后一个数组的最后一个元素
System.out.println(arr[arr.length - 1][arr[arr.length - 1].length - 1]);
- 二维数组的内存图
- 二维数组的使用
- 二维数组的遍历
public class Test{
public static void main(String[] args){
int[][] arr = {{10,20,30},{40,50,60},{70,80,90}};
for(int i = 0;i < arr.length;i++){
for(int j = 0;j < arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
}
}
- 二维数组的求和
int[][] arr={{22, 66, 44},{77, 33, 88},{25, 45, 65},{11, 66, 99}};
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
sum += arr[i][j];
}
}
System.out.println("总计:" + sum);
- 杨辉三角
import java.util.Scanner;
/*
需求:打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*
看图分析规律:
1.每一行的首尾都是1
2.从第三行开始,从第二列开始,中间的数字=他上一行的前一列和上一行的本列之和。
我们使用二维数组,来存储每一行的数据
*/
public class TestDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入行数");
int n = sc.nextInt();
//假定行数和列数都相等
int[][] arr = new int[n][n];
//每行的首位都是1
for (int i = 0; i < arr.length; i++) {
arr[i][0] = 1;
arr[i][i] = 1;
}
//从第三行开始,从第二列开始,中间的数字 = 上一行的前一列和上一行的本列之和
for(int i = 2; i < arr.length; i++){
for (int j = 1; j < i; j++) {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
//打印三角形
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
2.Java中的参数传递问题
- 基本类型作为参数传递,属于值传递,会把这个变量的值传过去。但是:形参的改变,不会影响实参
- 引用类型作为参数传递,属于引用传递,传递的是地址值。但是:形参的改变,会影响实参
3.递归
- 递归的定义:在方法中调用方法本身的一种现象
- 计算5的阶乘
//1.使用普通的方法
int num = 1;
for(int i = 5;i >= 1;i--){
num *= i;
}
System.out.println(num);
//2.使用阶乘
public class MyTest3 {
public static void main(String[] args) {
//递归的思想来做5的阶乘
int r=jieCheng(5);
System.out.println("结果"+r);
}
public static int jieCheng(int i) {
if(i==1){
return 1;
}else{
return i*jieCheng(i-1);
}
}
}