Java学习-Java循环加强和类方法的创建、解释、重载
一. 关于循环的一些练习
练习
计算1~5之间数字的乘积 (求5的阶乘, 5!) 提示: 存储累积的初始变量一定是1
1 public static void add(String[] args) { 2 int sum = 1; 3 for (int i = 1; i <= 5; i++) { 4 sum *= i; 5 } 6 System.out.println(sum); 7 }
练习
打印出10~1之间的数字
1 public static void oneTen(String[] args) { 2 for(int i = 10; i > 0; i--) { 3 System.out.println("第"+ i + "个数"); 4 }
练习
使用while循环统计出1~100之间所有能被7整除的数字个数
1 public static void printSevenNumber(String[] args) { 2 int i = 1; 3 int sum = 0; 4 while( i != 100) { 5 if (i % 7 == 0) { 6 sum += 1; 7 System.out.println(i); 8 } 9 i++; 10 } 11 System.out.println("能被七整除的数有" + sum); 12 }
1.循环的嵌套
1.概念: 在一个大循环中, 每次循环的内容(循环体)有一个一个重复操作,也就是又是一个循环, 像这样一个循环中写了另一个循环,这种格式就是循环的嵌套.
2.格式:
for(初始化语句1; 循环判断条件1; 循环变量改变1) {
for(初始化语句2; 循环判断条件2; 循环变量改变2) {
循环体;
}
}
- 执行的流程
1. 初始化语句1;
2. 循环判断条件1, 计算结果为false,外层循环结束.
3. 循环判断条件1,计算结果为true, 执行初始化语句2;
4. 循环判断条件2, 计算结果为false, 内层循环结束. 执行循环变量改变1, 回到第2步
5. 循环判断条件2, 计算结果为true, 执行循环体, 执行循环变量改变2, 回到第4步.
练习
使用循环嵌套打印出一下图形:
* * * * * *
* * * * * *
* * * * * *
1 public static void main(String [] args){ 2 for (int i = 1; i < 4; i++){ 3 for (int j = 1; j < 5; j++){ 4 System.out.print("* "); 5 } 6 System.out.println(); 7 } 8 }
使用循环嵌套打印图形时有个规则: 外层循环控制行数, 内层循环控制列数
练习
打印一下图形
* * * *
* * *
* *
*
public static void printJuxing(String[] args) { for (int i = 4; i > 0; i--) { for (int j = i; j >0 ; j--) { System.out.print("* "); } System.out.println(); } }
练习
九九乘法
1.一共9行,外层循环9次
2.每一行的式子的个数,刚好等于行号, 内层循环条件 小于等于行号
3.每一个的式子的特点: 第一个数字是: 列号 . 第二个数字: 行号 第三个数字: 列号和行号的乘积
1 public static void main(String[] args) { 2 for(int i = 1; i < 10; i++) { 3 for (int j = 1; j <= i; j++) { 4 System.out.print(j + "*" + j + "=" + (i * j) + "\t"); 5 } 6 System.out.println(); 7 } 8 }
方法
一. 方法
1.方法定义: 指的就是能完成特定功能的代码段.
2.如果某段代码经常被使用, 每次用都要写一遍, 为了简化程序的设计难度, 使用一个大括号,把这段代码包裹起来, 然后取一个名字, 将来要使用这段代码的时候,直接使用这个名字就可以访问这段代码.
3.方法的好处:
1.提高了代码的复用性
2.提高了代码的封装性, 别人在使用方法是不能直接看到内部的实现,他只需要会调用即可.也能提高程序的安全性.
3.简化了程序的设计难度
二. 方法的定义
1. 方法的定义的格式:
修饰符 返回值类型 方法名(参数列表) {
方法体;
}
2.方法格式的说明:
修饰符: 用来修饰方法访问权限, 目前全部都用: public static
返回值类型: 方法都具有一定的功能, 有可能会有一些数据产生, 就需要将数据返回给方法的调用者. 定义方法时需要告诉方法的调用者,应该使用什么样的数据类型接收方法产生的数据. 简单说: 返回值类型就是方法内部产生数据的数据类型. 注意:没有数据产生这里写: void (空)
方法名: 就是给封装的代码段起的名字,小驼峰命名法,见名知意即可.
参数列表: 这段代码要完成功能是,可能会需要一些数据, 这些数据就需要通过参数列表传入到方法的内部. 需要告诉调用者你要传入什么类型数据.
参数列表的书写格式 (数据类型1 参数名1, 数据类型2 参数名2) 这样调用者就知道要传入什么类型数据,以及传入几个数据.
方法体: 能完成特定功能的代码段
如果方法内部有数据产生, 需要使用return关键字, 把方法内部产生的数据返回给调用者.
return 数据;
3.方法的调用
1.方法不调用是不会执行的
2.方法调用的格式: 方法名(实际参数)
实际参数: 就是让方法执行,真实传入的数据
3.方法调用的其他形式:
1. 直接调用 使用没有返回值产生的方法 方法名(实际参数);
2. 赋值调用 必须是有返回值产生的方式, 数据类型 变量名 = 方法名(实际参数);
3. 打印(输出)调用 必须是有返回值产生的方法
System.out.println(方法名(实际参数));
4.方法使用的注意事项
1.方法定义的注意事项
1.方法是不能嵌套定义的, 方法必须定义一个类后面的大括号中
2.方法定义先后是没有区别的
3.方法之间是平级的关系,没有优先级
2. 方法的调用:
1. 方法是可以嵌套调用的, 就是在一个方法中调用其他方法
2. 甚至一个方法可以自己调用自己, 这种现象叫做递归调用, 递归有风险, 效率极低
3. 方法参数注意事项
1.定义方法的时候,叫做形式参数 (形参), 形参的书写格式 (数据类型 参数名, 数据类型 参数名, ...) 每个参数名前都要数据类型, 每定义完一个后要加逗号, 如果是最后一个就不加,
形参的作用: 告诉调用者需要什么类型数据以及的数据的个数.
2.调用方法的时候, 叫做实际参数(实参), 就是真正参与执行的数据,
2.1 实参不要数据类型
2.2 实参的数据类型一定要形参的数据类型一致
2.3 实参的个数一定要形参的个数一致
2.4 实参的顺序一定要形参的顺序一致
4. return语句
1. 第一个作用,就是把有返回值的方法中产生的数据返回给调用者
2. 如果一个方法的返回值类型不是void, 那么就必须提供return语句.
3. 第二个作用, 可以提前结束一个方法, 一般用来结束返回值为void的方法. 一个方法如果没有数据产生,也可以写return关键字, 但是必须写为: return; 表示提前结束方法
4.return语句之后不要在写代码了,因为那段代码不能执行到,编译会报错.
练习
定义一个功能求取两个int类型的最大值, 方法名: getMax 调用 键盘录入两个整数, 传入到方法中, 得到最大值
1 public class Dome1 { 2 public static void main(String[] args) { 3 Scanner sc = new Scanner(System.in); 4 System.out.print("请输入两个整数:"); 5 int a = sc.nextInt(); 6 int b = sc.nextInt(); 7 int s = getMax(1, 2); 8 } 9 public static int getMax(int a, int b) { 10 return a > b ? a : b; 11 } 12 13 }
练习
定义一个方法,用来比较两个小数是否相等. 调用, 键盘录入两个小数, 键盘录入对象接收小数的方式:nextDouble()
public class Dome1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入两个小数:"); double c = sc.nextDouble(); double d = sc.nextDouble(); String mag = xiangD(c, d); System.out.println(mag); } public static String xiangD(double a, double b) { return a == b ? "相等" : "不相等"; } }
练习
定义一个方法,传入一个正整数, 要求计算出,1到整数的和 :比如传入100, 返回 5050
1 public class Dome1 { 2 public static void main(String[] args) { 3 Scanner sc = new Scanner(System.in); 4 System.out.print("请输入一个整数:"); 5 int num = sc.nextInt(); 6 int sum = addNum(num); 7 System.out.println(sum); 8 } 9 public static int addNum(int a) { 10 int sum = 0; 11 for (int i = 1; i <= a ; i++) { 12 sum += i; 13 } 14 return sum; 15 } 16 }
方法的重载
1.重载: Overload
2.方法的重载概念:
在同一个类中, 方法名相同,但是参数列表不同,与返回值类型无关, 这样多个方法之间的关系就是重载.
3.概念的说明:
1. 在同一个类中: 必须是写在一个类中的方法, 不同类的中是不可能发生重载的.
2. 方法名相同: 方法名要一模一样
3. 参数列表不同: 参数的类型不同, 参数的个数, 参数的顺序不同. 与参数的名字没有关系.
4. 与返回值类型无关: 即使返回值类型不同, 也不算重载, 这叫做方法重复.
4. 方法重载的好处
如果没有方法的重载, 咱们有很多个相同逻辑的代码段(方法),就需要为这多个相同逻辑的代码段取多个名字, 对于方法定义这来说,取名就是一个很重的负担. 同样对于方法的调用者来说也是一种负担,因为要记忆大量的名字.
有了重载之后,同一个类中相同逻辑的代码段,就可以只取一个名字, 定义方法的人工作量减轻了,调用者只需要记忆一个名字,就能访问多个相同逻辑的方法.
5.之前的学习咱们就使用了重载的好处
1.每次打印内容用的方法: println, print 在他们所在的类型,都定义大量同名方法,但是这些参数列表都不同相同, println, print 都存在重载的方法.