TwoDimensionalArray(二维数组)、
二维数组就像一个矩阵啦!输入方式的话就像{{}};这样的!中间用,号间隔。
或者这样理解:一维数组的每个元素又是一个数组。
import java.util.Scanner;
public class Change{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
int[][] arr = {{0,0,0,0,0},{1,1,1,1,1},{3,3,3,3,3},{5,5,5,5,5},{4,5,6,7,8}};
//输出二维图形,遍历二维数组。
for (int i = 0;i < arr.length ;i++ ) {
for (int j = 0;j < arr[i].length;j++ ) {
System.out.print(arr[i][j] + " ");
}
System.out.println(" ");
}
}
}
遍历二维数组一定要会啊。
1、二维数组中每个一维数组中的个数可以不一样哦。也就是说矩阵中可以没有值,不是0。
2、怎么定义 int[][] = {{}};
3、二维数组的元素个数:依然是arr.length,这其实是一位数组啦。
4、每一个又是一位数组,还需要再次遍历才能将所有的值表示出来。
5、访问第(i + 1)个一位数组的第(j + 1)个值------------------> arr[i][j] -----减一就好!
万丈高楼平地起,辉煌只能靠自己!
int[] [] name = new int[2][3];
二维数组在内存中是怎么存在的呢?
最开始指向的其实是地址,他的地址再次指向数据。先地址后数据。 了解到他的地址存储方式,就知道 ,二维数组其实跟矩阵不一样,矩阵中必须有数值,而二维数组里面具体的一维数组就可以长度不等啦。(瞎想)
怎么使用和一维数组大体类似;
(1)int[][] name = new int[1][2];
(2)int[][] name;
name = new int[2][3];
(3)int[][] name = {{},{}};//静态初始化。
列数不确定的元素:就是上面的瞎想。
直接赋值的机制。
import java.util.Scanner;
public class Change{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
// 动态创建二维数组就是
// i = 0: 1
// i = 1: 2 2
// i = 2: 3 3 3
int[][] arr = new int[3][];//也就是最开始没开空间。列数不知道。
//创建二维数组,有三个一维数组,但是每个一维数组没有开辟空间。
for (int i = 0;i < arr.length ;i++ ) {
arr[i] = new int[i + 1];//给一维数组开辟空间。想象地址的指向也就明晰了。
// 遍历每个一维数组,并且赋值,赋值的时候要注意点。每个一维数组是独立的个体。
for (int j = 0;j < arr[i].length ;j++ ) {
arr[i][j] = i + 1;
}
}
for (int i = 0;i < arr.length ;i++ ) {
for (int j = 0;j < arr[i].length ;j ++ ) {
System.out.print(arr[i][j] + " ");
}
System.out.println("");
}
}
}
小练习:遍历二维数组:
import java.util.Scanner;
public class Change{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
int[][] arr = {{4,6},{1,4,5,7},{-2}};
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;
public class Change{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
int[][] arr = new int[10][];
for (int i = 0;i < arr.length ;i++ ) {
// 开辟空间吧
arr[i] = new int[i + 1];
// 找规律赋值
for (int j = 0;j < arr[i].length ;j++ ) {
if (j == 0 || j == arr[i].length - 1 ) {
arr[i][j] = 1;
}else{
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
}
}
}
for (int i = 0;i < arr.length ;i++ ) {
for (int j = 0;j < arr[i].length ;j ++ ) {
System.out.print(arr[i][j] + " ");
}
System.out.println(" ");
}
}
}
那个第一行和最后一行不就是上次打印空心三角形的例子吗,这里不过是变成了第一个和对最一个元素。最后一个其实只到了arr【i】.length - 1。
二维数组还可以这样表示int[] name[];知道就行了
int[] x,y[]; --------->这里面x是一位数组,y是二维数组。
抓住本质啊。