day04函数与数组.docx
- 文档编号:7922648
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:24
- 大小:144.60KB
day04函数与数组.docx
《day04函数与数组.docx》由会员分享,可在线阅读,更多相关《day04函数与数组.docx(24页珍藏版)》请在冰豆网上搜索。
day04函数与数组
1函数
1.1数的概述
发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数。
练习:
把两个整数相加:
publicclassFunctionDemo1{
publicstaticvoidmain(String[]args){
/*
inta=4+5;
System.out.println("a="+a);
intb=3+9;
System.out.println("b="+b);
*/
add(4,5)
}
publicstaticintadd(inta,intb){
returna+b;
}
}
举例:
地铁自动售票机,接收纸币或硬币,返回车票,该售票机具有独立功能,可以理解为函数。
有未知内容参与运算(要投币,纸币硬币,多少钱)。
有返回值(返回车票)
举例2:
手机,手机具备打电话功能,有未知内容(电话号码),键盘是(形参),输入的号码是实际参数。
1.2函数的格式
修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数2,…)
{
执行语句;
return返回值;
}
返回值类型:
运行这段程序得出的一个运算结果,结果类型,如果函数没有返回值则用void
来表示该函数没有返回值。
函数名:
仅仅是一个标识符,可以随意起名字。
形式参数:
是一个变量,用于存储调用函数传递进来的实际参数。
实际参数:
传递给形式参数的具体数值。
返回值:
返回给调用者。
定义函数:
1:
是否有未知内容参与运算
2:
是否有运算结果(返回值)
案例:
获取2个整数中的较大的数。
publicstaticintgetMax(intx,inty){
intresult;
if(x>y){
result=x;
}else{
result=y;
}
returnresult;
}
解析:
getMax方法
该方法方法名为:
getMax,方法的作用是获取找出两个整数中较大的值。
该方法有两个int型参数,:
x和y,方法返回两个数中较大的一个。
publicstatic是方法的修饰符
int是方法的返回值类型
getMax是方法的方法名
(intx,inty)是参数列表,x和y是形式参数。
{}花括号内的代码是方法体
returnresult;result是返回值。
方法定义完成之后,如何调用一个方法?
函数调用:
想要使用方法,必须调用它。
publicstaticvoidmain(String[]args){
intmax=getMax(5,7);
System.out.println(max);
}
一:
在main方法中调用getMax()方法,5和7就是给该方法传递的实际参数。
如果方法有返回值,可以定义一个变量接收返回值,变量类型和方法返回值类型一致。
本例中通过int类型变量max接收了getMax方法的返回值。
完整程序
这里的getMax(i,j);i和j就是实际参数。
publicclassDemo6{
publicstaticvoidmain(String[]args){
inti=5;
intj=7;
intmax=getMax(i,j);
System.out.println(i+"和"+j+"的最大值是:
"+max);
}
publicstaticintgetMax(intx,inty){
intresult;
if(x>y){
result=x;
}else{
result=y;
}
returnresult;
}
}
二:
上述案例中调用getMax方法,并将结果赋值给了max变量。
也可以直接打印getMax()方法的结果。
publicclassDemo6{
publicstaticvoidmain(String[]args){
inti=5;
intj=7;
//打印方法的结果
System.out.println(getMax(i,j));
}
publicstaticintgetMax(intx,inty){
intresult;
if(x>y){
result=x;
}else{
result=y;
}
returnresult;
}
}
注意:
main方法是程序的入口由虚拟机调用,方法和方法之间不能嵌套,方法之间通过调用来使用。
方法什么时候执行完毕:
当执行完return语句,或者执行到方法末尾的花括号时方法结束。
该类中包含了两个方法,main方法和getMax方法。
main方法由java虚拟机调用,并且main方法的写法是固定的。
Main方法可以调用其他方法。
当调用getMax方法时,变量i的值传递给方法中的x,j的值传递给方法中的y,并开始执行getMax方法中的语句,执行return,并返回运算结果。
getMax方法运行完毕。
1.3函数的特点
1、定义函数可以将功能代码进行封装
2、便于对该功能进行复用
3、函数只有被调用才会被执行
4、函数的出现提高了代码的复用性
5、对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
函数的返回值void
需求:
根据学生考试成绩划分ABCDA90-100B80-89C70-79D60-69E0-59,建议成绩使用double。
将该程序使用函数定义。
publicstaticvoidmain(String[]args){
printGrade(90);
printGrade(59.5);
}
publicstaticvoidprintGrade(doublescore){
chargrade;
if(score>=90.0)
System.out.println("A");
elseif(score>=80.0)
System.out.println("B");
elseif(score>=70.0)
System.out.println("C");
elseif(score>=60.0)
System.out.println("D");
else
System.out.println("E");
}
publicstaticvoidmain(String[]args){
getResult(5);
}
publicstaticintgetResult(intx){
System.out.println(returnx*8);
//调用该函数会报错.缺少返回值类型.
}
/*
*该方法没有具体的返回值,那么返回值的类型是不可以写int了
*但是又和函数的格式不符合了,怎么解决?
*当函数运算后,没有具体的返回值时,这时返回值类型用一个特殊的关键字做标志.
*该关键字就是voidvoid表示没有具体的返回值类型.
*当函数的返回值类型是void时,函数中的return语句可以省略不写.
*/
注意:
函数中只能调用函数,不可以在函数内部定义函数。
函数之间是平级的,相互之间是调用的关系.
错误写法
publicstaticvoidmain(String[]args){
publicstaticvoidgetResult(intx){
System.out.println(x*8);
//主函数,里边嵌套函数。
错误!
}
}
1.4函数的应用
案例一:
画矩形。
/*
为了提高代码的复用性
定义一个画矩形的函数
1、确定函数的运算结果的数据类型,void
2、确定没有未知参数。
*/
publicstaticvoiddraw(intwidth,intheight){
for(inti=0;i for(intj=0;j System.out.print("*"); } System.out.println(); } } 案例二: 两个数字对比是否相等 /* 1、确定函数的运算结果的数据类型,boolean 2、确定没有未知参数。 a,b */ publicstaticbooleanequlas(inta,intb){ /** if(a==b){ returntrue; }else{ returnfalse; } **/ returna==b? true: false; } 案例三: 比较两个数的大小 /* 比较两个整数谁大. */ publicstaticintmax(inta,intb) { /* if(a>b) returna; else returnb; */ returna>b? a: b; } 函数的使用注意事项: 1.函数中只能调用函数,不能定义函数,没有定义函数之前,不能调用函数。 2.输出语句只能对有具体返回结果的函数的进行打印。 3.返回值类型是void的函数,是不可以被输出语句打印的。 4.函数需要实现功能,那么函数只实现所需功能即可,不要实现不需要的功能。 1.5函数的重载 1、函数重载的定义: 在同一个类中,有一个以上的同名函数,只要函数的参数列表或参数类型不一样即可,与返回值无关,这些统称为方法的重载。 2、函数的重载存在的原因: 为了增强方法的阅读性,优化了程序设计。 案例1: 九九乘法表 privatestaticvoidprint99(){ for(inti=1;i<=9;i++){ for(intj=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+""); } System.out.println(); } } privatestaticvoidprint99(intnum){ for(inti=1;i<=num;i++){ for(intj=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+""); } System.out.println(); } } 练习: 判断那个方法是重载 voidshow(intw,doublec,charb){} voidshow(intx,chary,doublez){}true voidshow(inta,doublec,charb){}false voidshow(inta,charb){}true voidshow(doublec){}true doubleshow(intx,chary,doublez){}true 2数组 概念 同一种类型数据的集合。 其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[]数组名=new元素类型[元素个数或数组长度]; 示例: int[]arr=newint[5]; 格式2: 元素类型[]数组名=new元素类型[]{元素,元素,……}; int[]arr=newint[]{3,5,1,7}; int[]arr={3,5,1,7}; 如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。 如何解决这个问题,Java语言提供了数组(array)的数据结构,是一个容器可以存储相同数据类型的元素,可以将100个数存储到数组中。 1数组的概念 同一种类型数据的集合。 其实数组就是一个容器。 运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器,容器里装的东西就是数组的元素,数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素,也就是数组一旦定义,那么里边存储的数据类型也就确定了。 2数组的好处 存数据和不存数据有什么区别吗? 数组的最大好处就是能都给存储进来的元素自动进行编号.注意编号是从0开始。 方便操作这些数据。 例如学生的编号,使用学号就可以找到对应的学生。 3数组的格式 元素类型[]数组名=new元素类型[元素个数或数组长度]; 示例: int[]arr=newint[5]; 案例: 需求: 想定义一个可以存储3个整数的容器 实现: 1声明数组变量 为了使用数组必须在程序中声明数组,并指定数组的元素类型 =左半部分: 先写左边明确了元素类型是int,容器使用数组,那么如何来标识数组? .那么用一个特殊的符号[]中括号来表示。 想要使用数组是需要给数组起一个名字的,那么我们在这里给这个数组起名字为x.接着跟上等号。 代码体现: int[]x 注意: intx[]也是一种创建数组的格式。 推荐使用int[]x的形式声明数组。 2创建数组 =右半部分: 要使用一个新的关键字.叫做new。 new用来在内存中产生一个容器实体,数据要存储是需要有空间的,存储很多数据的空间用new操作符来开辟,newint[3];这个3是元素的个数。 右边这部分就是在内存中定义了一个真实存在的数组,能存储3个元素。 newint[3]做了两件事情,首先使用newint[3]创建了一个数组,然后把这个数组的引用赋值给数组变量x。 int[]x=newint[3]; x是什么类型? 任何一个变量都得有自己的数据类型。 注意这个x不是int类型的。 int代表的是容器里边元素的类型。 那么x是数组类型的。 数组是一种单独的数据类型。 数据类型分为2大派,分为基本数据类型和引用数据类型。 第二大派是引用数据类型。 那么大家现在已经接触到了引用数据类型三种当中的一种。 就是数组类型[]中括号就代表数组。 4、int[]arr=newint[5];在内存中发生了什么? 内存任何一个程序,运行的时候都需要在内存中开辟空间.int[]arr=newint[5];这个程序在内存中是什么样? 这就涉及到了java虚拟机在执行程序时所开辟的空间,那么java开辟启动了多少空间呢? 继续学习java的内存结构。 数组的定义 格式1: 元素类型[]数组名=new元素类型[元素个数或数组长度]; 示例: int[]arr=newint[5]; 格式2: 元素类型[]数组名=new元素类型[]{元素,元素,……}; int[]arr=newint[]{3,5,1,7}; int[]arr={3,5,1,7}; 注意: 给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。 创建数组之后不能修改数组的大小。 可以使用length属性获取数组的大小。 遍历数组 数组初始化 数组的格式 int[]x=newint[3]; x[0]=1; x[1]=2; 另一种定义: 该形式可以直接明确数组的长度,以及数组中元素的内容 int[]x={1,2,3}; int[]x=newint[]{1,2,3}; 初始化方式1: 不使用运算符new int[]arr={1,2,3,4,5}; int[]arr2=newint[]{1,2,3,4,5}; 初始化方式2: int[]arr3=newint[3]; arr3[0]=1; arr3[1]=5; arr3[2]=6; 如果数组初始化中不使用运算符new。 需要注意: 下列写法是错误的。 int[]arr; arr={1,2,3,4,5}; 此时初始化数组,必须将声明,创建,初始化都放在一条语句中个,分开会产生语法错误。 所以只能如下写: int[]arr={1,2,3,4,5}; 数组遍历 publicstaticvoidmain(String[]args){ int[]x={1,2,3}; for(inty=0;y<3;y++){ System.out.println(x[y]); //System.out.println("x["+y+"]="+x[y]);打印效果x[0]=1; }//那么这就是数组的第一个常见操作.遍历 } 数组中有一个属性可以获取到数组中元素的个数,也就是数组的长度.数组名.length publicstaticvoidmain(String[]args){ int[]x={1,2,3}; for(inty=0;y System.out.println(x[y]); //System.out.println("x["+y+"]="+x[y]);打印效果x[0]=1; }//那么这就是数组的第一个常见操作.遍历 } 数组的常见异常 一数组角标越界异常: ,注意: 数组的角标从0开始。 publicstaticvoidmain(String[]args){ int[]x={1,2,3}; System.out.println(x[3]); //java.lang.ArrayIndexOutOfBoundsException } 二空指针异常: publicstaticvoidmain(String[]args){ int[]x={1,2,3}; x=null; System.out.println(x[1]); //java.lang.NullPointerException } 数组: 什么时候使用数组: 当元素较多时为了方便操作这些数组,会先进行来临时存储,所使用的容器就是数组。 特点: 数组长度是固定的。 数组的内存分析 案例分析一: 案例分析二: 数组的常见操作 6.1案例一个数组取出最大值 /*定义一个获取最大值的功能: 1、确定结果: 返回值类型int 2、未知内容: 要获取哪个数组的最大值没有确定,则是数组没有确定 思路: 1、定义一个变量,记录住数组的比较大的元素。 2、遍历整个数组,让数组的每一个元素都和该变量进行对比即可。 3、当变量遇到比它大的元素,则让该变量记录该元素的值,当循环结束时,最大值产生了 */ publicstaticintgetMax(int[]arr) { //定义变量记录较大的值,初始化为数组中的任意一个元素。 intmax=arr[0]; for(intx=1;x { if(arr[x]>max) max=arr[x]; } returnmax; } 6.2直接排序 案例二: 使用直接排序对数组进行排序: /* 选择排序。 以一个角标的元素和其他元素进行比较。 在内循环第一次结束,最值出现的头角标位置上。 */ publicstaticvoidselectSort(int[]arr) { for(intx=0;x { for(inty=x+1;y 因为每一次比较, //都用x角标上的元素和下一个元素进行比较。 { if(arr[x]>arr[y]) { inttemp=arr[x]; arr[x]=arr[y]; arr[y]=temp; } } } } 6.3冒泡排序 案例三: 冒泡排序 /* 冒泡排序。 比较方式: 相邻两个元素进行比较。 如果满足条件就进行位置置换。 原理: 内循环结束一次,最值出现在尾角标位置。 */ publicstaticvoidbubbleSort(int[]arr) { for(intx=0;x { for(inty=0;y 让每次参与比较的元减。 //-1: 避免角标越界。 { if(arr[y]>arr[y+1]) { inttemp=arr[y]; arr[y]=arr[y+1]; arr[y+1]=temp; } } } } 6.4折半查找(二分法) 案例四: /* 为了提高查找效率,可使用折半查找的方式,注意: 这种查找只对有序的数组有效。 这种方式也成为二分查找法。 */ publicstaticinthalfSeach(int[]arr,intkey) { intmin,mid,max; min=0; max=arr.length-1; mid=(max+min)/2; while(arr[mid]! =key) { if(key>arr[mid]) min=mid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day04 函数 数组
![提示](https://static.bdocx.com/images/bang_tan.gif)