JAVA循环嵌套 方法的定义与重载 数组 数组异常 练习

    技术2022-07-11  76

    JAVA循环嵌套 方法的定义与重载 数组 数组异常 练习

    和前一天一样,循环嵌套,方法和数组都属于实操出真知的类型,尤其是方法的定义与调用是java的重中之重,这些在日后还是得面对不同类的题型多加练习 Day04

    循环嵌套

    在大循环内,如果每次循环都是相似同带有重复性的操作,就可以使用循环简化操作。可以使处理循环问题更加灵活。嵌套的可以是分支结构的语句,也可以是循环语句。

    格式

    ​ for(初始化语句1;循环条件表达式1; 初始化变量1 的自增){

    ​ 循环体语句

    ​ for(初始化语句2; 循环的条件表达式2;初始化变量2的自增*){

    ​ 循环体语句;

    ​ }

    ​ }

    执行流程:

    初始化语句1判断条件表达式1 如果是false 结束整个循环如果是true就初始化语句2判断条件表达式2如果是false就结束整个循环,完成初始化变量1的自增如果是true就执行循环体语句,完成初始化变量2的自增,完成初始化变量1的自增完成初始化变量1的自增,再返回第六步重复之前操作以此类推

    举例

    打印三角形 5行 第一行1颗星,第二行2颗星…第5行五颗星

    package Chating; public class Ex { public static void main(String[] args) { for (int i = 1; i <= 5; i++) {//外循环控制行数。i的初始值为1,需求是要5行,所以i自增后至多小于等于5 for (int j = 0; j < i; j++) {//内循环表示每行打印的*星数,打印的多少j跟着行数i变 System.out.print("*"); } System.out.println();//每打印一行星后换行 } } }


    方法

    具有特定功能可以重复调用的代码段

    一些代码段要经常使用,每次都写一遍效率太低,用大括号括起来 再起个名字,之后可以直接通过名字来调用代码段

    特点:提高了代码的复用性封装性,简化了代码的思维难度

    方法的定义

    格式:

    ​ 修饰符 返回值类型 方法名称(参数列表) {

    ​ 方法体语句;

    ​ return 返回值;

    ​ }

    修饰符:这里先写Public static

    返回值类型:方法执行后会产生数据返回给调用者,这里表示的是返回数据的数据类型(填int 返回的就是整数,填String返回的就是字符串)如果不需要返回值 填void即可

    方法名称 :名字是合法的标识符即可

    参数列表:我们定义方法是要完成功能,比如要计算两个整数的和,那在调用该方法时。需要从外部传入两个整数类型的数据在这个变量的容器中,这里的参数列表就表示将要传递进来的数据类型

    方法体语句:即调用者想要完成的功能

    return返回值:要返回给调用者的最终结果,如果没有返回值,可以单写一个return表示该方法的结束

    参数列表:

    形式参数: 在方法定义的时候使用,来接收调用该方法时传递的参数。需要加上数据类型,相当于定义了一个变量,只有变量的声明,没有进行赋值,实际参数: 在方法调用的时候使用,即传递给被调用方法的值,不能加上数据类型的参数,也就是对变量进行赋值,使用逗号隔开,顺序必须和定义方法的时候形式参数的顺序一致

    方法的调用

    方法调用的三种格式 :直接调用 打印调用 赋值调用

    ​ 直接调用:没有的返回的结果 单纯的使用方法

    ​ 打印调用:把方法的返回值写入输出语句打印出来

    ​ 赋值调用:把方法的结果赋值给变量,这个变量可以重复使用

    方法定义的注意事项:

    方法的顺序无所谓方法中不能嵌套定义方法定义后必须调用才能执行,自身不会执行如果方法有返回值 必须加上return+返回值return后的“返回值”,必须和方法名称前面的“返回值类型”保持对应如果没有返回值 则可省略return 返回值类型为void

    举例

    需要计算两个整数的和的方法

    package Chating; public class Ex { public static void main(String[] args) { getSum(2,8);//调用getSum()方法 System.out.println("-------------------------");//分割线 System.out.println(getSum2(2,8));//打印调用 } public static void getSum(int a,int b) {//需求是录入两个整数 所以形参都是int类型的a,b int sum = a + b;//两个整数相加 System.out.println(a+"与"+b+"的和为"+sum);//因为是输出语句结果没有返回值,所以之前返回值类型是void } public static int getSum2(int a,int b) {//需要的返回值类型是int,之前返回值类型是int int sum = a + b; return sum;//返回值类型是int } }

    方法的重载

    在同一类中,方法名相同,参数列表(参数列表 类型 个数 顺序 不同)不同,与返回值无关

    只要记住一个方法名称 就能实现相似的多个功能

    举例

    package Chating; public class Ex { public static void main(String[] args) { System.out.println(getSum(2,8)); //方法名相同,参数列表(参数列表 类型 个数 顺序 )不同 System.out.println(getSum(2.2,8.8,1.1)); //方法名都是getSum(),参数列表 类型是double,个数是3个,都不同 } public static int getSum(int a,int b) { int sum = a + b; return sum; } public static double getSum(double a,double b,double c) { double sum = a + b + c; return sum; } }


    数组

    就是一个储存相同类型数据的容器

    定义的格式

    元素的数据类型[] 数组名 = new 元素的数据类型[数组容器的大小];

    举例

    package Chating; public class Ex { public static void main(String[] args) { //元素的数据类型[] 数组名 = new 元素的数据类型[元素的个数]; int[] arr = new int[3]; System.out.println(arr); } }

    [ : 表示打印的是一个一维数组I:表示数组中的元素的数据类型 I代表int类型@: 表示一个普通的间隔符15db9742:是数组的内存地址

    数组初始化

    给数组申请内存空间,并给该空间里每个元素位置储存数据的过程

    初始化的分类:

    动态初始化:在定义数组时候就划分了内存空间 除了初始值(默认为0,无值为null)其余什么都没有,在程序的运行过程中,才知道每个元素被赋予什么值,一般运用在知到数组中要放什么数据,但是只知道数组中应该存储的元素的个数静态初始化 在定义数组时就确定了值 比如 人的性别 国籍等一般不会改变的值
    动态初始化格式:

    ​ 元素的数据类型[] 数组名 = new 元素的数据类型[元素的个数]

    元素的赋值的方式:

    ​ 数组名[元素的索引] = 元素值;

    索引:代表每个元素在数组中的位置,这个位置从0 开始 到元素个数-1

    元素要一个一个赋值

    如果没有给元素赋值,这个元素也是有默认值,默认值是0

    静态初始化格式:

    元素的数据类型[] 数组名 = new 元素的数据类型[]{元素1,元素2,元素3…}

    每个元素的数据类型前后一致

    元素的个数,取决于大括号中元素的个数

    简化的格式:

    ​ 元素的数据类型[] 数组名 = {元素1,元素2,元素3…}

    举例

    动态初始化

    package Chating; public class Ex { public static void main(String[] args) { //数组的动态初始化 //需求 定义数组 五人制足球 String[] player = new String[5]; //第一个人 player[0] = "萨拉赫"; //第二个人 player[2] = "马内"; //第三个人 //第四个人 player[3] = "菲尔米诺"; //第五个人 player[4] = "奥里吉"; //取出数组中元素的值 数组名[索引] System.out.println(player[0]); System.out.println(player[1]); System.out.println(player[2]); System.out.println(player[3]); System.out.println(player[4]); } }

    静态初始化

    package Chating; public class Ex { public static void main(String[] args) { //静态初始化 //定义一个数组 存储 3个同学的考试分数 int[] count = new int[] {98,76,82};//在数组创建的过程就已经赋值了 System.out.println(count[0]); System.out.println(count[1]); System.out.println(count[2]); System.out.println("==============================="); int[] c = {98,76,82}; System.out.println(c[0]); System.out.println(c[1]); System.out.println(c[2]); } }

    数组的异常

    索引越界异常

    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3

    ​ at com.ujiuye.demo.Demo15.main(Demo15.java:6)

    产生原因大多为:要获取到的索引值超出了数组的范围

    空指针异常

    Exception in thread “main” java.lang.NullPointerException

    ​ at com.ujiuye.demo.Demo16.main(Demo16.java:8)

    空:null,一旦一个引用数据类型变量被赋值为空,他就不再记录堆内存中的某个地址

    空指针异常原因大多为:当引用类型变量不再指向任何位置的时候,你还用这个变量,就会抛出空指针异常

    Processed: 0.011, SQL: 9