JAVA基础【day05】:方法/数组

这辈子没办法做太多事情,所以每一件都要做到精彩绝伦。 --------史蒂夫.乔布斯

方法

(1)方法:就是完成特定功能的代码块。
        注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。
(2)格式:
    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
        方法体语句;
        return 返回值;
    }

    修饰符:目前就用 public static。后面再详细讲解其他修饰符
    返回值类型:就是功能结果的数据类型
    方法名:就是起了一个名字,方便我们调用该方法。
    参数类型:就是参数的数据类型
    参数名:就是变量
    参数分类:
        实参:实际参与运算的数据
        形参:方法上定义的,用于接收实际参数的变量
    方法体语句:就是完成功能的代码块
    return:结束方法
    返回值:就是功能的结果,由return带给调用者。
(3)两个明确:
    返回值类型:结果的数据类型
    参数列表:参数的个数及对应的数据类型
(4)方法调用
    A:有明确返回值的方法
        a:单独调用,没有意义
        b:输出调用,不是很好,因为我可能需要不结果进行进一步的操作。但是讲课一般我就用了。
        c:赋值调用,推荐方案
    B:void类型修饰的方法
        a:单独调用
(5)案例:
    A:求和方案
    B:获取两个数中的较大值
    C:比较两个数据是否相同
    D:获取三个数中的最大值
    E:输出m行n列的星形
    F:输出nn乘法表
(6)方法的注意事项
    A:方法不调用不执行
    B:方法之间是平级关系,不能嵌套定义
    C:方法定义的时候,参数是用,隔开的
    D:方法在调用的时候,不用在传递数据类型
    E:如果方法有明确的返回值类型,就必须有return语句返回。
(7)方法重载
    在同一个类中,方法名相同,参数列表不同。与返回值无关。
        
    参数列表不同:
        参数的个数不同。
        参数的对应的数据类型不同。
(8)方法重载案例
    不同的类型的多个同名方法的比较。
/*
    键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表
*/
import java.util.Scanner;

class FunctionTest5 {
    public static void main(String[] args) {
        //创建对象
        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入n的值:(1~9)");
        int n = sc.nextInt();
        
        //调用
        printNN(n);
    }
    
    /*
        需求:输出对应的nn乘法表
        两个明确:
            返回值类型:void
            参数列表:int n
    */
    public static void printNN(int n) {
        for(int x=1; x<=n; x++) {
            for(int y=1; y<=x; y++) {
                System.out.print(y+"*"+x+"="+y*x+"\t");
            }
            System.out.println();
        }
    }
}
方法调用图解

数组

(1)数组:存储同一种数据类型的多个元素的容器。
(2)特点:每一个元素都有编号,从0开始,最大编号是长度-1。
            编号的专业叫法:索引
(3)定义格式
    A:数据类型[] 数组名;
    B:数据类型 数组名[];
        
    推荐是用A方式,B方法就忘了吧。
    但是要能看懂
(4)数组的初始化
    A:动态初始化
        只给长度,系统给出默认值
        
        举例:int[] arr = new int[3];
    B:静态初始化
        给出值,系统决定长度
        
        举例:int[] arr = new int[]{1,2,3};
        简化版:int[] arr = {1,2,3};
(5)Java的内存分配
    A:栈 存储局部变量
    B:堆 存储所有new出来的
    C:方法区(面向对象部分详细讲解)
    D:本地方法区(系统相关)
    E:寄存器(CPU使用)
        
    注意:
        a:局部变量 在方法定义中或者方法声明上定义的变量。
        b:栈内存和堆内存的区别
            栈:数据使用完毕,就消失。
            堆:每一个new出来的东西都有地址
                每一个变量都有默认值
                    byte,short,int,long 0
                    float,double 0.0
                    char '\u0000'
                    boolean false
                    引用类型 null
                  数据使用完毕后,在垃圾回收器空闲的时候回收。
(6)数组内存图
    A:一个数组
    B:二个数组
    C:三个数组(两个栈变量指向同一个堆内存)
(7)数组的常见操作
        A:遍历
            方式1:
                public static void printArray(int[] arr) {
                    for(int x=0; x max) {
                            max = arr[x];
                        }
                    }
                    
                    return max;
                }
                
            最小值:
                public static int getMin(int[] arr) {
                    int min = arr[0];
                    
                    for(int x=1; x
Java中的内存分配图解
数组的静态初始化及内存图
数组的内存图解1(一个数组)
数组的内存图解2(二个数组)
数组的内存图解3(三个数组)

二维数组

(1)元素是一维数组的数组。
(2)格式:
    A:数据类型[][] 数组名 = new 数据类型[m][n];
    B:数据类型[][] 数组名 = new 数据类型[m][];
    C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};
    D:数据类型[][] 数组名 = {{...},{...},{...}};
(3)案例(掌握):
    A:二维数组的遍历
    B:二维数组的求和
    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
二维数组格式1的内存图解
image-20210930001323635
二维数组格式3的内存图解

思考题

(1)Java中的参数传递问题
    Java中只有值传递。 
    基本类型:形式参数的改变不影响实际参数
    引用类型:形式参数的改变直接影响实际参数
(2)数据加密问题
    综合的小案例。
/*
    思考题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:20
        change(a,b);
        System.out.println("a:"+a+",b:"+b); //???   a:10,b:20

        int[] 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=20
        System.out.println("a:"+a+",b:"+b); //a:10,b:20
        a = b;  //a=20
        b = a + b; //b=40
        System.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
Java中的参数传递问题图解
/*
    某个公司采用公用电话传递数据信息,数据是小于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
/*
    把刚才的代码改进一下:
        A:把数据改进为键盘录入
        B:把代码改进为方法实现 
        
        另一个数据的测试:
        number:1234567
        第一步:7654321
        第二步:2109876
        第三步:6109872
        
    知识点:
        变量
        数据类型
        运算符
        键盘录入
        语句
        方法
        数组
*/
import java.util.Scanner;

class JiaMiDemo2 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        
        //请输入一个数据
        System.out.println("请输入一个数据(小于8位):");
        int number = sc.nextInt();
        
        //写功能实现把number进行加密
        //调用
        String result = jiaMi(number);
        System.out.println("加密后的结果是:"+result);
    }
    
    /*
        需求:写一个功能,把数据number实现加密。
        两个明确:
            返回值类型:String 做一个字符串的拼接。
            参数列表:int number
    */
    public static String jiaMi(int number) {
        //定义数组
        int[] arr = new int[8];
        
        //定义索引
        int index = 0;
        
        //把number中的数据想办法放到数组中
        while(number > 0) {
            arr[index] = number%10;
            index++;
            number /= 10;
        }
        
        //把每个数据加5,然后对10取得余数
        for(int x=0; x

你可能感兴趣的:(JAVA基础【day05】:方法/数组)