欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 05、函数 数组

05、函数 数组

2024/10/24 15:25:21 来源:https://blog.csdn.net/weixin_55345689/article/details/141105106  浏览:    关键词:05、函数 数组

01、函数的概述

        一、函数

                定义在类中,具有特定功能的一段小程序

        二、格式

                修饰符  返回值类型  函数名(参数类型  形式参数1 , 参数类型  形式参数2.…){

                        执行语句;

                        return 返回值;

                }

        三、解释

                1.修饰符:public static

                2.返回值类型:这段程序最终返回的结果的数据类型。

                3.函数名:其实就是函数的名称,方便调用。

                4.参数类型:其实就是数据类型

                5.参数

                        a.形式参数:就是接收实际参数的变量。

                        b.实际参数:实际参与运算的那个变量。

                6.执行语句:就是按照正常的逻辑完成的功能代码。

                7.返回值:就是程序的结果。

                8.return 返回值: 将来在哪里调用这个函数,那么,return就把结果返回到哪里

02、函数的定义和调用

        一、main是主函数,默认被jvm调用了

        二、写一个函数,用于求两个int类型的数的和

public class SumFunction {public static int sum(int num1, int num2) {return num1 + num2;}public static void main(String[] args) {int a = 10;int b = 20;int result = sum(a, b);System.out.println("两数之和为:" + result);}
}

                注意:

                A:函数与函数是平级关系,不能嵌套定义。

                B:函数只有被调用才执行。

        三、函数的调用:具有明确返回值的函数的调用

                A:单独调用。一般是没有意义的。 事例:sum(x,y);

                B:输出调用。因为,我可能还需要对结果进行计算。所以,不够好。

                        事例:System.out.printIn(sum(x,y))

                C:赋值调用。推荐方式。

                首先看函数,返回值类型是什么,我们就应该用什么类型接收。

                        事例:
                        int sum = sum(xy);
                        System.out.println(sum);

03、求两个数中的最大值

        用函数来做:

                A:先用if--else来做。

public class MaxNumberIfElse {public static int findMax(int num1, int num2) {if (num1 > num2) {return num1;} else {return num2;}}public static void main(String[] args) {int a = 10;int b = 20;int max = findMax(a, b);System.out.println("两个数中的最大值是:" + max);}
}

                B:用条件运算符来做。

public class MaxNumberTernaryOperator {public static int findMax(int num1, int num2) {return num1 > num2? num1 : num2;}public static void main(String[] args) {int a = 10;int b = 20;int max = findMax(a, b);System.out.println("两个数中的最大值是:" + max);}
}

        总结下:那个是形参,那个是实参

04、函数的调用过程图解

        在函数中定义的变量,和实际传递过来的没有关系。

                A:在main函数中,调用方法sum(x,y);。

                B:然后走到sum函数中,将实参传递过来。

                C:然后执行函数中的语句。

                D:将结果return到main函数中调用sum0函数的地方。

05、函数是什么结束的

        一、函数是怎么开始的?

                被JVM虚拟机调用,调到main0函数中,从而来被执行。

        二、函数是怎么结束的?

                函数其实是有关键字return让他结束的。


                注意:void类型的的数,其实最后一行,默认有一个return;

06、比较两个int类型的数据是否相等

        需求:比较两个int类型的数据是否相等

        思路:

                A:返回值类型:boolean

                B:参数列表:int a,int b

        Demo:

                方式1:用if--else来做

public class CompareIntIfElse {public static boolean compare(int a, int b) {if (a == b) {return true;} else {return false;}}public static void main(String[] args) {int num1 = 10;int num2 = 10;boolean result = compare(num1, num2);System.out.println("两个数是否相等:" + result);}
}

                方式2:用条件运算符来做

public class CompareIntTernaryOperator {public static boolean compare(int a, int b) {return a == b? true : false;}public static void main(String[] args) {int num1 = 10;int num2 = 10;boolean result = compare(num1, num2);System.out.println("两个数是否相等:" + result);}
}

                方式3:直接return a==b

public class CompareIntDirect {public static boolean compare(int a, int b) {return a == b;}public static void main(String[] args) {int num1 = 10;int num2 = 10;boolean result = compare(num1, num2);System.out.println("两个数是否相等:" + result);}
}

07、输出一个长方形的函数

        需求:根据给定的行数和列数输出一个*组成的长方形。

        思路:
                返回值类型:void
                参数列表:int rows,int cols

public class PrintRectangle {public static void printRectangle(int rows, int cols) {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {System.out.print("*");}System.out.println();}}public static void main(String[] args) {int rows = 5;int cols = 8;printRectangle(rows, cols);}
}

08、函数重载

        在很多时候,我们的功能可能是相同的,但是,参数可能不同如果起不同的名字,当然是可以的。但是,又由于函数的名字 -- 见名知意,所以,很多时候,我们必须用一个有意义的名字。在这种情况下,Java就提供了一种机制:函数重载。

        特点:

                函数名相同,参数列表不同(个数,对应的数据类型)。
                与返回值类型无关。

        注意:

                永远建议,写的什么类型的形式参数,你就应该用什么类型的实际参数调用。

                如果实际类型是小的,形式类型是大的,可以这样写,程序不报错。反之不行。

09、数组的概述

        先用Demo演示,后画图做讲解。

        两个引用变量指向同一个堆内存空间。

        int0 arr = (1,2,3};

        arr[0]= 1;

        arr[1]= 2;

        arr[2] = 3;

        int[ arr1 = arr;

        arr1[1]= 10;

        System.out.printin(arr1]);//10

        System.out.printin(arr1[2]); //3

10、数组的内存图解

        一、Java中对内存分五块:

                栈: 变量,或者方法的执行

                堆: 所有new出来的

                方法区: 方法,String常量池,静态区(面向对象讲)

                本地方法区: 跟系统相关的方法

                寄存器: 由CPU执行。

        堆:new建立的实例都存放在堆内存中

                1、每一个new出来的东西都有地址值。

                        本身是一个十进制,显示的时候是一个16进制的数据。

                2、每一个实例中的内存都有默认值。

                        整数:0;

                        浮点数:0.0;

                        字符型:"u000';

                        布尔型:false。

                3、会在不确定的时间内被垃圾回收器回收。

        栈:当数据使用完毕(超出了它的作用域),它就自动从内存中消失。

                局部变量:定义在方法中或者方法声明上的形式参数都叫局部变量。

11、数组的定义方式

        方式1:数据类型[] 变量名 = new 数据类型[个数或者长度];

        方式2:数据类型 变量名[] = new 数据类型[个数或者长度];

        方式3:数据类型[] 变量名 = new 数据类型(元素1,元素2,元素3...);

        方式4:数据类型[] 变量名 = { 元素1,元素2,元素3...};

12、数组的常见问题

        A:数组越界异常。你访问了不存在的索引。

                ArrayindexOutOfBoundsException

        B:空指针异常。一个实例(对象)已经不存在了,你还去访问它的内容。

                NullPointerException

                把一个nul赋值给一个引用类型数据,其实就是让这个引用类型的变量不再指向堆内存的数据,这样的话,原本指向的内容就是垃圾了。

13、数组操作:遍历

        数组遍历:获取数组中的所有元素。

        把数据存储起来就是为了使用,而要使用数组中的数据,就必须通过索引。

        如果数组太长,我们没办法一个个的去数为此,Java提供了一个属性:length

        格式:数组名.length

        例题:写功能(函数)完成数组的遍历

public class TraverseArray {public static void traverseArray(int[] arr) {for (int num : arr) {System.out.print(num + " ");}System.out.println();}public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};traverseArray(array);}
}

14、数组操作:获取最值

        获取数组中的最大值。

        思路:

                1、需要进行比较,并定义变量。记录住每次比较后较大的值;

                2、对数组中的元素进行遍历取出,和变量中记录的元素进行比较,如果遍历到的元素大于变量中记录的元素,就用变量记录住该大的值;

                3、遍历结束,该变量记录的就是最大值。

public class FindMaxInArray {public static int findMax(int[] arr) {if (arr.length == 0) {return Integer.MIN_VALUE;}int max = arr[0];for (int num : arr) {if (num > max) {max = num;}}return max;}public static void main(String[] args) {int[] array = {5, 8, 3, 12, 7};int maxValue = findMax(array);System.out.println("数组中的最大值是:" + maxValue);}
}

15、数组操作:基本查找

        根据给定的值,去找它在数组中的位置(索引)。

16、二维数组概述及内存图

        索引的别名:角标,下标,编号。建议叫索引。

        二维数组: 每一个元素其实是一个一维数组。

        格式:

                int[][] arr = new int[3][2];

        解释:

                定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素一维数组的名称为别为:arr[0],arr[1],arr[2]给第一个一维数组的索引为1的元素赋值,写法是arr[0][0]= 10;

17、二维数组的定义格式

        方式1:

                int[][] arr = new int[3][2];
                规则的矩形。

        方式2:

                int[][] arr = new int[3][];

                非规则的矩形。

                解释:

                二维数组中有三个一维数组每个一维数组都是默认初始化值null,可以对这三个一维数组分别进行初始化

                arr[0]= new int[3];

                arr[1] = new int[l];

                arr[2]= new int[2];

        方式3:

                int[][] arr ={{1,4,3},{9,3,7,5}.(2,1}};

18、二维数组的遍历

        思路:

                A:二维数组的每一个元素是一维数组获取到每一个一维数组。

                B:一维数组的遍历我们讲过了。

        arr.length:获取二维数组的长度,其实也就是一维数组的个数。

        arr[x].length:获取的是每一个一维数组的长度。

        arr[x][y]:获取的是二维数组的元素。

19、二维数组的应用

        某个商场,每个月都有销售额。每个季度也有销售额,年终还得有销售额。

        例题:已知某个商场每月的销售额,求该商场每个季度的销售额以及年终销售额。

public class StoreSales {public static void main(String[] args) {int[][] monthlySales = {{10000, 12000, 15000}, // 第一季度每月销售额{18000, 20000, 16000}, // 第二季度每月销售额{14000, 13000, 17000}, // 第三季度每月销售额{22000, 25000, 23000}  // 第四季度每月销售额};int[] quarterlySales = new int[4];int annualSales = 0;for (int i = 0; i < monthlySales.length; i++) {int quarterSales = 0;for (int j = 0; j < monthlySales[i].length; j++) {quarterSales += monthlySales[i][j];}quarterlySales[i] = quarterSales;annualSales += quarterSales;}System.out.println("第一季度销售额:" + quarterlySales[0]);System.out.println("第二季度销售额:" + quarterlySales[1]);System.out.println("第三季度销售额:" + quarterlySales[2]);System.out.println("第四季度销售额:" + quarterlySales[3]);System.out.println("年终销售额:" + annualSales);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com