day07_方法
今日内容
零、 复习昨日
一、作业讲解
二、方法
零、 复习昨日
for(int i = 1;i < 10;i++) {} // 变量i的作用范围,只有for循环内可以用 for(;;){} // 死循环 break; // switch,循环// 打断当前这个结构,不再执行 continue; // 打断当次,继续下次
一、作业讲解
package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class Demo1 {public static void main(String[] args) {// 输出100~1000的所有末尾为8的数字for (int i = 100; i < 1000; i++) {if(i % 10 == 8) {System.out.println(i );}}System.out.println("-------------" );/*** 外层循环控制行数* 内存循环控制列数* ****** ***** **** *** **/for (int i = 1; i < 6; i++) {for (int j = 5; j > i-1; j--) {System.out.print("*" );}System.out.println( );}System.out.println("---------------" );/*** ** **** ****** ********/for (int i = 1; i < 5; i++) {for (int j = 3; j > i-1; j--) {System.out.print(" " );}for (int j = 0; j < 2 * i - 1; j++) {System.out.print("*" );}System.out.println( );}System.out.println("---------------" );/*** 3 文钱可以买1只公鸡,* 2 文钱可以买一只母鸡,* 1 文钱可以买3 只小鸡。* 用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?* ------------------* 假设数量: 公鸡g,母鸡m,小鸡x* g + m + x = 100; // 只数100只* 3g + 2m + x / 3 = 100; // 钱数100文* 最多* 公鸡只能买: 100 / 3 = 33* 母鸡只能买: 100 / 2 = 50* 小鸡只能买: 虽然能买300只小鸡,但是要求就最多100只* -----------* 思路: 穷举法* 当公鸡0只,母鸡0只,小鸡?只合适* 当公鸡0只,母鸡1只,小鸡?只合适* 当公鸡0只,母鸡2只,小鸡?只合适* 当公鸡0只,母鸡?只,小鸡?只合适* 当公鸡1只,母鸡?只,小鸡?只合适* 当公鸡2只,母鸡?只,小鸡?只合适* 当公鸡?只,母鸡?只,小鸡?只合适*/for (int g = 0;g <= 33;g++) {for (int m = 0;m <= 50;m++) {for (int x = 0;x <= 100;x++) {// if (x % 3 == 0) {if (x % 3 == 0 && g + m + x == 100 && 3*g + 2*m + x/3==100) {System.out.println("公鸡"+g+"只,母鸡"+m+"只,小鸡"+x+"只" );}// }}}}int count = 0;for (int i = 1; i < 101; i++) {for (int j = 1; j < 101; j++) {for (int k = 1; k < 101; k++) {count++;}}}System.out.println("循环多少次"+count );}
}
二、方法
方法(method),其他语言中称为函数()
方法: 是完成某个功能的代码块
2.1 为什么需要方法/好处
之前的问题:
- 代码都放在main方法,写代码时候变量容易重复,臃肿
- 为了运行某个结果,main方法内的代码都要执行一遍
- 当代码需要重复使用时,以前就需要重写一遍,且后期维护麻烦
如果使用方法,好处:
- 使用方法将代码抽取成独立代码块,互相不影响. 需要看哪个结果,就运行哪个方法
- 代码抽取成方法后,方便重复使用
- 方便后期维护
2.2 方法定义
public static void methodName() {
}
public static void methodName(int a,double b) {
}
public static int methodName(String s) { return 0;
}
/*** 方法语法解释:* public 词义:公共的,作用:访问权限,目前每个方法都要定义(固定的)* static 词义:静态的,作用:后续再说(面向对象),目前每个方法都要定义(固定的)* 第三处: 方法的返回值类型* 方法的返回值是方法的功能执行完返回的结果数据* 返回值类型是 结果的数据类型(例如:int,double,String等)* 方法也可以不返回,写void,意思是空* ----------------------------* 如果返回值类型是void,方法体内{}不写return 值;* 如果返回值类型不是void,方法体内{}一定要写return 值;* 第四处: 方法名,见名知意,小写驼峰原则* () : 括号叫做参数列表,参数就是方法执行需要的数据* 列表: 可以有任意个参数,多个之间逗号,隔开* 具体写法: 数据类型 变量名, 与之前声明变量完全一样* {} : 方法体,方法执行的具体逻辑代码*/
2.3 方法演示
2.3.1 无参无返回值
public static void m1(){}
// 定义一个方法,输出一句你好public static void printHello() {System.out.println("你好" );}// 定义一个方法,输出1-10public static void printNum() {int a = 1;for (int i = 1; i < 11; i++) {System.out.println(i );}}
2.3.2 有参数无返回值
参数是方法执行需要用到的数据
定义在方法的参数列表()内
public static void m2(数据类型 参数名,数据类型 参数名){}
package com.qf.method;import java.util.Scanner;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 方法演示*/
public class Demo4 {/*** 有参数的方法* int n,就是定义参数,其实就是声明变量* int n在这里叫做形式参数,形参*/// 定义一个方法,输出指定次数你好public static void printHello(int n){// i <= n 使用变量for (int i = 1; i <= n; i++) {System.out.println("你好" );}}// 定义一个方法,输出1-npublic static void printNum(int n) {for (int i = 1; i <= n; i++) {System.out.println(i );}}// 定义一个方法,输出1-n之间的偶数public static void printEven(int n) {for (int i = 1; i <= n; i++) {if (i % 2 == 0) {System.out.println(i );}}}// 定义方法,输出2数之和public static void printSum(int a,int b){System.out.println(a + " + "+ b +" = "+(a+b) );}// 定义方法,遣词造句public static void printInfo(String name,int age,String address,double money,char sex){System.out.println("我叫"+name+",今年"+age+"岁,性别"+sex+",家住"+address+",身上有"+money+"块钱" );}public static void main(String[] args) {// 调用方法传参数,个数类型顺序要对应printInfo("安其拉",8,"峡谷之巅",6300.0,'女');}
}
2.3.3 无参有返回值
返回值是方法执行后返回的数据.
定义方法时
不再写void,而是写对应的数据类型;
然后在方法体内使用return 值;来完成返回;
返回给谁?
- 返回给调用者
package com.qf.method;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 返回值演示*/
public class Demo5 {// 方法,返回一个int值1// 瑞昕接水public static int show1() {// 水杯return 1;}// 我-邱哥public static void main(String[] args) {// 调用瑞昕,接水// 调用方法,接收方法执行完后的返回值int result = show1();System.out.println(result );}
}
2.3.4 有参有返回值
详见上方
2.4 方法定义总结
- 正常的定义: public static void m1(){}
- 方法定义不能嵌套,方法都是平级的
- 方法在类中定义的顺序无所谓,因为最终只有main方法可以运行
- 根据需求来决定要不要加参数,加几个参数,什么类型的参数
- 根据需求来决定要不要返回值,如果要返回,再看情况返回值类型是什么
2.5 方法调用执行
java代码有且仅有一个唯一入口,那就是main方法
即所有代码必须通过main方法来运行, 是指需要在main方法内调用其他方法,其他方法才可执行
如何调用方法?
- 无参方法 ,直接写方法名
- 有参方法,直接写方法名,
必须传入实参
,且参数类型个数顺序要和形参一致- 方法无返回值, 不能接收返回值
- 方法有返回值,
可接收
返回值也可不接收
返回值// 程序有一个唯一入口public static void main(String[] args) {// 调用无参数方法printHello();// 调用有参数的方法,必须传入实参printNum(10);// 接收返回值int result = add(3,4);}
方法之间可以互相调用!
ps: 一定注意相互调用时,不要出现死循环(相互调用!!!)
package com.qf.method;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 方法调用*/
public class Demo6 {// 组员-扫地public static void studentClean(){System.out.println("学生" );System.out.println("学生扫地" );}// 组长-扫地public static void groupLeaderClean(){System.out.println("组长" );// 调用组员,让其扫地studentClean();}// 班长-扫地public static void classLeaderClean() {System.out.println("班长");// 调用组长,让其扫地groupLeaderClean();}// 程序唯一入口-邱哥-扫地public static void main(String[] args) {System.out.println("老师" );classLeaderClean();}
}
方法之间相互调用,返回值给谁? 返回值给直接的调用者
package com.qf.method;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 方法调用*/
public class Demo6 {// 组员-扫地public static String studentClean(){System.out.println("学生" );System.out.println("学生扫地" );// return给组长return "学生完成扫地";}// 组长-扫地public static String groupLeaderClean(){System.out.println("组长" );// 调用组员,让其扫地String result = studentClean();System.out.println(result );// return 给班长return "组长扫完地";}// 班长-扫地public static String classLeaderClean() {System.out.println("班长");// 调用组长,让其扫地String result = groupLeaderClean();System.out.println(result );// 返回给老师return "班长扫完地";}// 程序唯一入口-邱哥-扫地public static void main(String[] args) {System.out.println("老师" );String result = classLeaderClean( );System.out.println(result );}
}
附录
Statement 语句
miss 缺失
return 返回
method 方法
function 函数
information 简写info 信息
address 地址
length 长度
result 结果
get 得到
student 学生
clean 打扫
group 组
leader 领导