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

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

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

循环嵌套

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

格式

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

循环体语句

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

循环体语句;

​ }

​ }

执行流程:
  1. 初始化语句1
  2. 判断条件表达式1 如果是false 结束整个循环
  3. 如果是true就初始化语句2
  4. 判断条件表达式2如果是false就结束整个循环,完成初始化变量1的自增
  5. 如果是true就执行循环体语句,完成初始化变量2的自增,完成初始化变量1的自增
  6. 完成初始化变量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,一旦一个引用数据类型变量被赋值为空,他就不再记录堆内存中的某个地址

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值