首页 > 代码库 > javaSE第六天

javaSE第六天

第六天????28

1. 二维数组(理解)????28

(1)就是元素为一维数组的一个数组。????28

(2)格式:????28

(3)案例(掌握):????28

A:二维数组的遍历????28

B:二维数组的求和????28

C:杨辉三角形????29

2. 两个思考题(理解)????30

(1)Java中的参数传递问题????30

(2)数据加密问题????31

3. 面向对象(掌握)????33

(1)面向对象????33

(2)面向对象的思想特点????33

(3)把大象装进冰箱(理解)????33

(4)类与对象????33

(5)类的定义及使用????34

(6)案例:????34

(7)内存图????34

(8)Java程序的开发,设计和特征????35

第六天

1. 二维数组(理解)
????(1)就是元素为一维数组的一个数组。
????(2)格式:

????????A:数据类型[][] 数组名 = new 数据类型[m][n];

????????B:数据类型[][] 数组名 = new 数据类型[m][];

????????C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};

????????D:数据类型[][] 数组名 = {{...},{...},{...}};

参数:m : 表示这个二维数组有多少个一维数组

n : 表示每一个一维数组的元素有多少个

????(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:二维数组的求和

/*

* 需求:二维数组求和

*/

class Array2Test2 {

????public?static?void main(String[] args) {

????????// 把题目的数据用二维数组来表示

????????int[][] arr = { { 22, 66, 44 }, { 77, 33, 88 }, { 25, 45, 65 }, { 11, 66, 99 } };

?

????????// 定义一个求和变量sum,初始化值是0

????????int?sum = 0;

?

????????// 通过遍历就可以得到每一个二维数组的元素。

????????for (int?x = 0; x < arr.length; x++) {

????????????for (int?y = 0; y < arr[x].length; y++) {

????????????????// 把元素累加即可。

????????????????sum += arr[x][y];

????????????}

????????}

?

????????// 最后输出sum,就是结果。

????????System.out.println("总和为:" + sum );

????}

}

?

????????C:杨辉三角形

(不要想着一个循环就可以搞定,应该分为多个循环一步一步的处理)

/*

?

????需求:打印杨辉三角形(行数可以键盘录入)

????

????1

????1 1????

????1 2 1

????1 3 3 1

????1 4 6 4 1

????1 5 10 10 5 1

?

????分析:看这种图像的规律

????????A:任何一行的第一列和最后一列都是1

????????B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

????

????步骤:

????????A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n

???????? 这个n的数据来自于键盘录入。

????????B:给这个二维数组任何一行的第一列和最后一列赋值为1

????????C:按照规律给其他元素赋值

????????????从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

????????D:遍历这个二维数组。

*/

import java.util.Scanner;

?

class Array2Test3 {

????public?static?void main(String[] args) {

????????//创建键盘录入对象

????????Scanner sc = new Scanner(System.in);

????????

????????//这个n的数据来自于键盘录入。

????????System.out.println("请输入一个数据:");

????????int?n = sc.nextInt();

????????

????????//定义二维数组

????????int[][] arr = new?int[n][n];

????????

????????//给这个二维数组任何一行的第一列和最后一列赋值为1

????????for(int?x=0; x<arr.length; x++) {

????????????arr[x][0] = 1; //任何一行第1

????????????arr[x][x] = 1; //任何一行的最后1

????????}

????????

????????//按照规律给其他元素赋值

????????//从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

????????for(int?x=2; x<arr.length; x++) {

????????????//这里如果y<=x是有个小问题的,就是最后一列的问题

????????????//所以这里要减去1

????????????//并且y也应该从1开始,因为第一列也是有值了

????????????for(int?y=1; y<=x-1; y++) {

????????????????//每一个数据是它上一行的前一列和它上一行的本列之和。

????????????????arr[x][y] = arr[x-1][y-1] + arr[x-1][y];

????????????}

????????}

????????

????????//这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似

????????for(int?x=0; x<arr.length; x++) {

????????????for(int?y=0; y<=x; y++) {

????????????????System.out.print(arr[x][y]+"\t");

????????????}

????????????System.out.println();

????????}

????}

}

?

?

2. 两个思考题(理解)
????(1)Java中的参数传递问题

????????Java中只有值传递

????????基本类型:形式参数的改变不影响实际参数

????????引用类型:形式参数的改变直接影响实际参数

????(2)数据加密问题

????????综合的小案例(我没有做出来,是一个比较好的综合练习)

????

/*

????某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,

????在传递过程中需要加密,加密规则如下:

????????首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,

????????最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,

????????然后,把加密后的结果在控制台打印出来。

????????

????题目要求:

????????A:数据是小于8位的整数

????????????定义一个int类型的数据

????????????int number = 123456;

????????B:加密规则

????????????a:首先将数据倒序

????????????????结果 654321

????????????b:然后将每位数字都加上5,再用和除以10的余数代替该数字

????????????????结果 109876

????????????c:最后将第一位和最后一位数字交换

????????????????结果 609871

????????C:把加密后的结果输出在控制台

????????

????????通过简单的分析,我们知道如果我们有办法把这个数据变成数组就好了。

????????不是直接写成这个样子的:

????????????int[] arr = {1,2,3,4,5,6};

????????????

????????如何把数据转成数组呢?

????????????A:定义一个数据

????????????????int number = 123456;

????????????B:定义一个数组,这个时候问题就来了,数组的长度是多少呢?

????????????????int[] arr = new int[8]; //不可能超过8

????????????????在赋值的时候,我用一个变量记录索引的变化。

????????????????定义一个索引值是0

????????????????int index = 0;

????????????C:获取每一个数据

????????????????int?ge = number%10

????????????????int?shi = number/10%10

????????????????int?bai = number/10/10%10

????????????????

????????????????arr[index] = ge;

????????????????index++;

????????????????arr[index] = shi;

????????????????index++;

????????????????arr[index] = bai;

????????????????...

*/

class JiaMiDemo {

????public?static?void main(String[] args) {

????????//定义一个数据

????????int?number = 123456;

????????

????????//定义一个数组

????????int[] arr = new?int[8];

????????

????????//把数据中每一位上的数据获取到后存储到数组中

????????/*

????????int index = 0;

????????arr[index] = number%10; //arr[0]=6;

????????index++;

????????arr[index] = number/10%10; //arr[1]=5;

????????index++;

????????arr[index] = mumber/10/10%10; //arr[2]=4;

????????*/

????????

????????//通过观察这个代码,我们发现应该是可以通过循环改进的

????????int?index = 0;

????????

????????while(number > 0) { //number=123456,number=12345,number=1234,number=123,number=12,number=1,number=0

????????????arr[index] = number%10; //arr[0]=6,arr[1]=5,arr[2]=4,arr[3]=3,arr[4]=2,arr[5]=1

????????????index++;//index=1,index=2,index=3,index=4,index=5,index=6

????????????number/=10;//number=12345,number=1234,number=123,number=12,number=1,number=0

????????}

????????

????????//然后将每位数字都加上5,再用和除以10的余数代替该数字

????????for(int?x=0; x<index; x++) {

????????????arr[x] += 5;

????????????arr[x] %= 10;

????????}

????????

????????//最后将第一位和最后一位数字交换

????????int?temp = arr[0];

????????arr[0] = arr[index-1];

????????arr[index-1] = temp;

????????

????????//输出数据

????????for(int?x=0; x<index; x++) {

????????????System.out.print(arr[x]);

????????}

????????System.out.println();

????}

}

?

3. 面向对象(掌握)
????(1)面向对象

????????面向对象是基于面向过程的编程思想

????(2)面向对象的思想特点

????????A:是一种更符合我们思考习惯的思想

????????B:把复杂的事情简单化

????????C:让我们从执行者变成了指挥者

????????

????????举例:

????????????买电脑

????????????洗衣服

????????????做饭

????????????...

????????????万事万物皆对象

????(3)把大象装进冰箱(理解)

????????A:面向过程实现

????????B:面向对象实现

????????

????????注意:如何让我们的操作更符合面向对象思想呢?

????????A:有哪些类

????????B:每个类有哪些成员

????????C:类与类的关系

????(4)类与对象

????????A:现实世界的事物

????????????属性????事物的基本描述

????????????行为????事物的功能

????????B:Java语言中最基本的单位是类。所以,我们要用类来体现事物

????????C:类

????????????成员变量????事物属性

????????????成员方法????事物行为

????????D:类:是一组相关的属性和行为的集合。是一个抽象的概念。

???????? 对象:是该类事物的具体存在,是一个具体的实例。(对象)

????????

???????? 举例:

????????????学生:类

????????????班长:对象

????(5)类的定义及使用

????????A:类的定义

????????????成员变量????定义格式和以前一样,就是位置不同,在类中,方法外。

????????????成员方法????定义格式和以前一样,就是去掉了static

????????B:使用类的内容

????????????a:创建对象? 格式

????????????????类名 对象名 = new 类名();

????????????b:如何使用成员变量和成员方法呢

????????????????对象名.成员变量

????????????????对象名.成员方法()

????(6)案例:

????????A:学生类的定义和使用

????????B:手机类的定义和使用

????(7)内存图

????????A:一个对象的内存图

????????技术分享

????????B:二个对象的内存图

????????技术分享

????????C:三个对象的内存图

????????技术分享

????(8)Java程序的开发,设计和特征

????????A:开发:就是不断的创建对象,通过对象调用功能

????????B:设计:就是管理和维护对象间的关系

????????C:特征

????????????a:封装(encapsulation

????????????b:继承(inheritance

????????????c:多态(polymorphism

javaSE第六天