=============================================================================
=============================================================================
涉及到的知识点有:
1:二维数组(理解)
(1)二维数组的定义
(2)二维数组的格式
格式一:(自动动态初始化)
格式二:(半自动动态初始化)
格式三:(静态初始化)
面试题:
(3)二维数组的案例(掌握)
A:二维数组的遍历
B:二维数组的求和
C:打印杨辉三角形(行数可以键盘录入)
2:两个思考题(理解)
(1)Java中的参数传递问题及图解。
(2)数据加密问题。
=============================================================================
=============================================================================
1:二维数组(理解)
(1)二维数组的定义:元素是一维数组的数组。
(2)二维数组的格式:
格式一:(自动动态初始化)
数据类型[][] 数组名 = new 数据类型[m][n]; //常用这个格式。
数据类型 数组名[][] = new 数据类型[m][n]; //该格式可以,但是很少用了。
数据类型[] 数组名[] = new 数据类型[m][n]; //该格式也可以,但是很少用了。
m表示这个二维数组有多少个一维数组。
n表示每一个一维数组的元素个数。
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr。
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]。
每个一维数组有2个元素,可以通过arr[m][n]来获取。
即: arr[m][n] 表示获取第m+1个一维数组的第n+1个元素。
例如:arr[1][2] 表示获取第2个一维数组的第3个元素。
如下如图所示01:
---------------------------------------
格式二:(半自动动态初始化)
数据类型[][] 数组名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组。
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
如下如图所示02:
---------------------------------------
格式三:(静态初始化)
数据类型[][] 数组名 = new 数据类型[][]{ {...}, {...}, {...} };
数据类型[][] 数组名 = { {...}, {...}, {...} }; 格式三的简化版格式
举例:
int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] arr = { { 1, 2, 3 }, { 4, 5 }, { 6 } };
如下如图所示03:
面试题:
下面定义的区别:
int x, y; //定义了1个int类型的变量x,同时也定义了1个int类型的变量y。
//等价于
int x;
int y;
---------------------------------------
int[] x, y[]; //定义了1个int类型的一维数组x,同时也定义了1个int类型的二维数组y。
//等价于
int[] x;
int[] y[];
(3)二维数组的案例(掌握):
A:二维数组的遍历
外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。
public static void printArray2(int[][] arr) {
for(int x = 0; x < arr.length; x++) {
for(int y = 0; y < arr[x].length; y++) {
System.out.print(arr[x][y]+" ");
}
System.out.println();
}
}
B:二维数组的求和
int sum = 0;
for(int x = 0; x < arr.length; x++) {
for(int y = 0; y < arr[x].length; y++) {
sum += arr[x][y];
}
}
C:打印杨辉三角形(行数可以键盘录入)
1 /*
2 需求:打印杨辉三角形(行数可以键盘录入)
3
4 1
5 1 1
6 1 2 1
7 1 3 3 1
8 1 4 6 4 1
9 1 5 10 10 5 1
10
11 分析:看这种图像的规律:
12 A:任何一行的第一列和最后一列都是1。
13 B:从第三行开始,除去第一列和最后一列,剩余的每一列的数据是它上一行的前一列和它上一行的本列之和。
14
15 步骤:
16 A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。
17 这个n的数据来自于键盘录入。
18 B:给这个二维数组任何一行的第一列和最后一列赋值为1。
19 C:按照规律给其他元素赋值:
20 从第三行开始,除去第一列和最后一列,剩余的每一列的数据是它上一行的前一列和它上一行的本列之和。
21 D:遍历这个二维数组。
22 */
23 import java.util.Scanner;
24
25 class Array2Test3 {
26 public static void main(String[] args) {
27 //创建键盘录入对象。
28 Scanner sc = new Scanner(System.in);
29
30 //这个n的数据来自于键盘录入。
31 System.out.println("请输入一个数据:");
32 int n = sc.nextInt();
33
34 //定义二维数组
35 int[][] arr = new int[n][n];
36
37 //给这个二维数组任何一行的第一列和最后一列赋值为1
38 for(int x = 0; x < arr.length; x++) {
39 arr[x][0] = 1; //任何一行第一列
40 arr[x][x] = 1; //任何一行的最后一列
41 }
42
43 //按照规律给其他元素赋值
44 //从第三行开始,除去第一列和最后一列,剩余的每一列的数据是它上一行的前一列和它上一行的本列之和。
45 for(int x = 2; x < arr.length; x++) {
46 //这里如果 y <= x 是有个小问题的,就是最后一列的问题,因为最后一列已经给过值了。
47 //所以这里要减去1
48 //并且y也应该从1开始,因为第一列也给过值了。
49 for(int y = 1; y <= x - 1; y++) {
50 //除去第一列和最后一列,剩余的每一列的数据是它上一行的前一列和它上一行的本列之和。
51 arr[x][y] = arr[x - 1][y - 1] + arr[x - 1][y];
52 }
53 }
54
55 //遍历这个二维数组。
56 /*
57 for(int x = 0; x < arr.length; x++) {
58 for(int y = 0; y < arr[x].length; y++) {
59 System.out.print(arr[x][y]+" ");
60 }
61 System.out.println();
62 }
63 */
64 //这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似。
65 for(int x = 0; x < arr.length; x++) {
66 for(int y = 0; y <= x; y++) {
67 System.out.print(arr[x][y]+" ");
68 }
69 System.out.println();
70 }
71 }
72 }
-----------------------------------------------------------------------------
2:两个思考题(理解)
(1)Java中的参数传递问题及图解。
基本类型:形式参数的改变对实际参数没有影响。
引用类型:形式参数的改变直接影响实际参数。
基本类型:传递的是基本类型的数据值。
引用类型:传递的是地址值。
小结:不管怎么说,都是值,即在Java中,只有值传递。
如下图所示04:
(2)数据加密问题。
综合的小案例。
int index = 0;
arr[index] = number % 10 = number / 1 % 10;
index++;
arr[index] = number / 10 % 10 = number / 10 % 10;
index++;
arr[index] = number / 10 / 10 % 10 = number /100 % 10;
......
---------------------------------------
int index = 0;
while (number > 0) {
arr[index] = number % 10;
number /= 10;
}
示例代码如下:
1 /*
2 把刚才的代码改进一下:
3 A:把数据改进为键盘录入
4 B:把代码改进为方法实现
5
6
7 另一个数据的测试:
8 number:1234567
9 第一步:7654321
10 第二步:2109876
11 第三步:6109872
12
13 知识点:
14 变量
15 数据类型
16 运算符
17 键盘录入
18 语句
19 方法
20 数组
21 */
22 import java.util.Scanner;
23
24 class JiaMiDemo2 {
25 public static void main(String[] args) {
26 //创建键盘录入对象
27 Scanner sc = new Scanner(System.in);
28
29 //请输入一个数据
30 System.out.println("请输入一个数据(小于8位):");
31 int number = sc.nextInt();
32
33 //写功能实现把number进行加密
34 //调用
35 String result = jiaMi(number);
36 System.out.println("加密后的结果是:"+result);
37 }
38
39 /*
40 需求:写一个功能,把数据number实现加密。
41 两个明确:
42 返回值类型:String 为了做一个字符串的拼接。
43 参数列表:int number
44 */
45 public static String jiaMi(int number) {
46 //定义数组
47 int[] arr = new int[8];
48
49 //定义索引
50 int index = 0;
51
52 //把number中的数据想办法放到数组中
53 while(number > 0) {
54 arr[index] = number % 10;
55 index++;
56 number /= 10;
57 }
58
59 //把每个数据加5,然后对10取得余数
60 for(int x = 0; x < index; x++) {
61 arr[x] += 5;
62 arr[x] %= 10;
63 }
64
65 //把第一位和最后一位交换
66 int temp = arr[0];
67 arr[0] = arr[index - 1];
68 arr[index - 1] = temp;
69
70 //把数组的元素拼接成一个字符串返回
71 //定义一个空内容字符串
72 String s = "";
73
74 for(int x = 0; x < index; x++) {
75 s += arr[x];
76 }
77
78 return s;
79 }
80 }
=============================================================================