javaSE第六天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaSE第六天相关的知识,希望对你有一定的参考价值。
第六天
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第六天的主要内容,如果未能解决你的问题,请参考以下文章