java基础学习_基础语法(下)02_day06总结

=============================================================================
=============================================================================

涉及到的知识点有:
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]+"\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         第一步: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 }

=============================================================================

posted @ 2018-02-08 23:50  黑泽君  阅读(250)  评论(0编辑  收藏  举报