本文共 7035 字,大约阅读时间需要 23 分钟。
=============================================================================
=============================================================================涉及到的知识点有:
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 110 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 //给这个二维数组任何一行的第一列和最后一列赋值为138 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 //所以这里要减去148 //并且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]+"\t");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]+"\t");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 第一步:765432110 第二步:210987611 第三步:610987212 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 number44 */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 }
=============================================================================
我的GitHub地址: 我的博客园地址: 我的蚂蚁笔记博客地址: Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】