【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸

+关注继续查看

int[][] map;
char c[][];

-----------------------------------------------------------------------------------------------------------------------------------------------------------

int[][] m = {{1,2,3},{2,3,4}};

int[][][] b = {{{1,2,3},{1,2,3}},{{3,4,1},{2,3,4}}};

byte[][] b = new byte[2][3];
int m[][];
m = new int[4][4];

int n[][];
n = new int[2][]; //只初始化第一维的长度
//分别初始化后续的元素
n[0] = new int[4];
n[1] = new int[3];

----------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------

int[][] m = {{1,2,3,1},{1,3},{3,4,2}};
int sum = 0;
for(int i = 0;i < m.length;i++){         //循环第一维下标
sum += m[i].length;                 //第二维的长度相加
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

① 需要几维数组
② 每一维的长度是多少
③ 按照怎样的规则存储值
④ 数组值的意义是什么

1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3

int n = 6;
int[][] arr = new int[n][n];
int data; //数值
//循环赋值
for(int row = 0;row < arr.length;row++){
for(int col = 0;col <arr[row].length;col++){
data = row + col + 1;
if(data <= n){
arr[row][col] = data;
}else{
arr[row][col] = data %n;
}
}
}
//输出数组的值
for(int row = 0;row < arr.length;row++){
for(int col = 0;col <arr[row].length;col++){
System.out.print(arr[row][col]);
System.out.print(' ');
}
System.out.println();
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

int[][] arr = new int[10][10];
//循环赋值
for(int row = 0;row < arr.length;row++){
for(int col = 0;col <= row;col++){
if(col == 0){ //第一列
arr[row][col] = 1;
}else{
arr[row][col] =arr[row - 1][col] + arr[row - 1][col - 1];
}
}
}
//输出数组的值
for(int row = 0;row < arr.length;row++){
for(int col = 0;col <= row;col++){
System.out.print(arr[row][col]);
System.out.print(' ');
}
System.out.println();
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

{
{0,0,0,1,0,0,0},
{0,0,1,0,1,0,0},
{0,1,0,0,0,1,0},
{1,0,0,0,0,0,1},
{0,1,0,0,0,1,0},
{0,0,1,0,1,0,0},
{0,0,0,1,0,0,0}
}

int[][] map = {
{0,0,0,1,0,0,0},
{0,0,1,0,1,0,0},
{0,1,0,0,0,1,0},
{1,0,0,0,0,0,1},
{0,1,0,0,0,1,0},
{0,0,1,0,1,0,0},
{0,0,0,1,0,0,0}
};
//输出数组的值
for(int row = 0;row < map.length;row++){
for(int col = 0;col <map[row].length;col++){
switch(map[row][col]){
case 0:
System.out.print(' ');
break;
case 1:
System.out.print('*');
break;
}
}
System.out.println();
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------

1    2    3    4         1     2     3     4     5
12  13 14   5         14   15  16    17   6
11  16  15  6         13   20  19    18   7
10   9    8   7         12   11  10     9    8
4X4 螺旋数组4X5 螺旋数组对于螺旋数组来说，其中的数值很有规则，就是按照旋转的结构数值每次加1，实现该功能需要对数组和流程控制有角深刻的认识。

int n = 4;
int m = 5;
int[][] data = new int[n][m];
int dire; //当前数字的移动方向
final int UP = 0;             //上
final int DOWN = 1;         //下
final int LEFT = 2;         //左
final int RIGHT = 3;        //右
dire = RIGHT;
int value = 1;             //数组元素的值
int row = 0;                 //第一维下标
int col = 0;                 //第二维下标
data[0][0] = 1;         //初始化第一个元素
while(value < n * m){
switch(dire){
case UP:
row--; //移动到上一行
if(row < 0){ //超过边界
row++; //后退
dire = RIGHT;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
row++; //后退
dire = RIGHT;
continue; //跳过该次循环
}
break;
case DOWN:
row++; //移动到下一行
if(row >= n){ //超过边界
row--; //后退
dire = LEFT;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
row--; //后退
dire = LEFT;
continue; //跳过该次循环
}
break;
case LEFT:
col--; //移动到前一列
if(col < 0){ //超过边界
col++; //后退
dire = UP;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
col++; //后退
dire = UP;
continue; //跳过该次循环
}
break;
case RIGHT:
col++; //移动到后一行
if(col >= m){ //超过边界
col--; //后退
dire = DOWN;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
col--; //后退
dire = DOWN;
continue; //跳过该次循环
}
break;
}
value++; //数值增加1
data[row][col] = value;//赋值
}
//输出数组中的元素
for(int i = 0;i < data.length;i++){
for(int j = 0;j < data[i].length;j++){
if(data[i][j] < 10){//右对齐
System.out.print(' ');
}
System.out.print(data[i][j]);
System.out.print(' ');
}
System.out.println();
}

不规则二维数组

 1 //1.二维数组的定义
2 //2.二维数组的内存空间
3 //3.不规则数组
4 package me.array;
5 public class Array2Demo{
6
7
8     public static void main(String[] args){
9
10         //创建和打印不规则二维数组
11         int arr[ ][ ];
12
13         arr=new int[3][];//现在说明为不规则数组
14
15         arr[0]=new int[10];//arr[0]指向另一个一位数组
16         arr[1]=new int[3];
17         arr[2]=new int[4];
18
19         //赋值
20         for(int i=0;i<arr.length;i++){
21
22             for(int j=0;j<arr[i].length;j++){
23
24                 arr[i][j]=j;
25             }
26
27         }
28
29         //输出
30         for(int i=0;i<arr.length;i++){
31
32             for(int j=0;j<arr[i].length;j++){
33
34                 System.out.print(arr[i][j]+" ");
35             }
36             System.out.println();
37         }
38
39         /*输出结果：
40         0 1 2 3 4 5 6 7 8 9
41         0 1 2
42         0 1 2 3
43         *///
44
45     }
46
47 }

 1 //3.编写一个方法，返回double型二维数组，数组通过解析字符串参数获得。
2 //如"1,2;3,4,5;6,7,8"
3 //d[0,0]=1.0 d[0,1]=2.0 d[1,0]=3.0 ....
4 package me.parser;
5 public class TestString{
6
7     public static void main(String[] args){
8
9         //1.用字符串分解split(";")成三个字符串数组
10         //2.再分解split(",")
11
12         //声明一个二维数组用来装分解好的字符
13
14
15         String s="1,2;3,4,5;6,7,8";
16         //以split()方法 分解
17         String[] sFirst=s.split(";");
18
19         String[][] word=new String[sFirst.length][];
20
21         int flag=0;
22         for(int i=0;i<sFirst.length;i++){
23
24             //打印出已经分开的
25             //System.out.println(sFirst[i]);
26             /*这条语句输出
27             1,2
28             3,4,5
29             6,7,8
30             *///接下来在按照 ,分开他们放入一个一维数组
31
32             String[] sSecond=sFirst[i].split(",");
33              //~ System.out.println(sSecond.length);
34             //~ /*输出:
35             //~ 2
36             //~ ---------------------------------
37             //~ 3
38             //~ ---------------------------------
39             //~ 3
40             //~ ---------------------------------
41             //~ *///说明每次sSencond这个一维数组的长度不同
42             word[i]=new String[sSecond.length];//这步确定行不规则数组的每行长度
43
44             //为这个数组赋值
45             for(int j=0;j<sSecond.length;j++){
46
47                 word[i][j]=sSecond[j];
48             }
49
50             System.out.println("---------------这是第"+(i+1)+"次循环-------------------");
51         }
52
53         //输出二维数组
54         System.out.println("输出二维数组-------------------");
55         for(int i=0;i<word.length;i++){
56             for(int j=0;j<word[i].length;j++){
57
58                 System.out.print(word[i][j]+" ");
59             }
60             System.out.println();
61         }
62         /*结果：
63         ---------------这是第1次循环-------------------
64         ---------------这是第2次循环-------------------
65         ---------------这是第3次循环-------------------
66         输出二维数组-------------------
67         1 2
68         3 4 5
69         6 7 8
70         输出二维数组-------------------
71         *///
72     }
73 }

|
8天前
|

Java语言之float、double内存存储方式
Java语言之float、double内存存储方式
36 0
|
10天前
|
Java
44.【Java 基础篇之方法与内存】（二）
44.【Java 基础篇之方法与内存】
7 0
|
10天前
|

44.【Java 基础篇之方法与内存】（一）
44.【Java 基础篇之方法与内存】
42 0
|
2月前
|

java创建对象的内存过程和自动内存管理机制
java创建对象的内存过程和自动内存管理机制
18 0
|
2月前
|
Java
89 0
|
3月前
|
Java Docker 容器

46 0
|
3月前
|

JAVA内存解析
JAVA内存解析
30 0
|
3月前
|

Java程序性能分析：内存

828 5
|
3月前
|
Java 编译器
java一个对象内存图
java一个对象内存图
49 0
|
3月前
|
Java
java两个对象内存图
java两个对象内存图
48 0