6 Java基础语法(二维数组,参数传递与数据加密问题)&面向对象(面向对象思想,类与对象及使用,对象内存图解)

来源:互联网 发布:gta5n卡掉帧如何优化 编辑:程序博客网 时间:2024/05/31 19:05

1:二维数组(理解)

       (1)元素是一维数组的数组。

       (2)格式:

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

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

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

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

       (3)案例-二维数组遍历,求和(掌握):

              A:二维数组的遍历

/*需求:二维数组遍历外循环控制的是二维数组的长度,其实就是一维数组的个数。内循环控制的是一维数组的长度。*/class Array2Test {public static void main(String[] args) {//定义一个二维数组int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};//请问谁代表{1,2,3}//arr[0]就是第一个数组//arr[0] = {1,2,3};for(int x=0; x<arr[0].length; x++) {System.out.println(arr[0][x]);}System.out.println("--------------");for(int x=0; x<arr[1].length; x++) {System.out.println(arr[1][x]);}System.out.println("--------------");for(int x=0; x<arr[2].length; x++) {System.out.println(arr[2][x]);}System.out.println("--------------");//用循环改进for(int x=0; x<3; x++) {for(int y=0; y<arr[x].length; y++) {System.out.print(arr[x][y]+" ");}System.out.println();}System.out.println("--------------");//这个时候,注意了,3是我们根据上面的代码得出来的//但是,它不能针对任何的数组都可以这样//所以,我们应该想办法改进//其实,外面的这个循环的长度就是二维数组的长度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();}System.out.println("--------------");//用方法改进//调用方法printArray2(arr);System.out.println("--------------");//我们再来一个列数是变化的int[][] arr2 = {{1,2,3},{4,5},{6}};printArray2(arr2);}/*需求:遍历二维数组两个明确:返回值类型:void参数列表:int[][] arr*/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:二维数组的求和

/*公司年销售额求和某公司按照季度和月份统计的数据如下:单位(万元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99分析:A:把题目的数据用二维数组来表示int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};B:如何求和呢?求和其实就是获取到每一个元素,然后累加即可。C:定义一个求和变量sum,初始化值是0。D:通过遍历就可以得到每一个二维数组的元素。E:把元素累加即可。F:最后输出sum,就是结果。*/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:杨辉三角形

/*需求:打印杨辉三角形(行数可以键盘录入)11 11 2 11 3 3 11 4 6 4 1 1 5 10 10 5 1分析:看这种图像的规律A:任何一行的第一列和最后一列都是1B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。步骤:A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。  这个n的数据来自于键盘录入。B:给这个二维数组任何一行的第一列和最后一列赋值为1C:按照规律给其他元素赋值从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。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];//给这个二维数组任何一行的第一列和最后一列赋值为1for(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<arr[x].length; y++) {System.out.print(arr[x][y]+"\t");}System.out.println();}*///这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似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中只有值传递(包括引用类型的地址值)。


  

/*思考题1:看程序写结果,然后分析为什么是这个样子的。并画图讲解。最后总结Java中参数传递规律。Java中的参数传递问题:基本类型:形式参数的改变对实际参数没有影响。引用类型:形式参数的改变直接影响实际参数。*/class ArgsDemo {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("a:"+a+",b:"+b); //a:10,b:20change(a,b);System.out.println("a:"+a+",b:"+b); //???a:10,b:20int[] arr = {1,2,3,4,5}; change(arr);System.out.println(arr[1]); //???4}public static void change(int a,int b) { //a=10,b=20System.out.println("a:"+a+",b:"+b); //a:10,b:20a = b;//a=20b = a + b; //b=40System.out.println("a:"+a+",b:"+b); //a:20,b:40}public static void change(int[] arr) { //arr={1,2,3,4,5};for(int x=0; x<arr.length; x++) {if(arr[x]%2==0) {arr[x]*=2;}}//arr={1,4,3,8,5};}}

           

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

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

       (2)数据加密问题

              综合的小案例。

/*某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。 题目要求:A:数据是小于8位的整数定义一个int类型的数据int number = 123456;B:加密规则a:首先将数据倒序结果 654321b:然后将每位数字都加上5,再用和除以10的余数代替该数字结果 109876c:最后将第一位和最后一位数字交换结果 609871C:把加密后的结果输出在控制台通过简单的分析,我们知道如果我们有办法把这个数据变成数组就好了。不是直接写成这个样子的:int[] arr = {1,2,3,4,5,6};如何把数据转成数组呢?A:定义一个数据int number = 123456;B:定义一个数组,这个时候问题就来了,数组的长度是多少呢?int[] arr = new int[8]; //不可能超过8在赋值的时候,我用一个变量记录索引的变化。定义一个索引值是0int index = 0;C:获取每一个数据int ge = number%10int shi = number/10%10int bai = number/10/10%10arr[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=0arr[index] = number%10; //arr[0]=6,arr[1]=5,arr[2]=4,arr[3]=3,arr[4]=2,arr[5]=1index++;//index=1,index=2,index=3,index=4,index=5,index=6number/=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)

0 0
原创粉丝点击