seo网站标题,如何配置php网站,wordpress添加工具,国外网站做acm题目比较好一、方法
1.定义
方法#xff1a;是一种语法结构#xff0c;它可以把一段代码封装成一个功能#xff0c;以便重复使用。
方法的完整格式#xff1a; package cn.chang.define;public class MethodDemo1 {public static void main(String[] args) {// 目标#xff1a;掌…一、方法
1.定义
方法是一种语法结构它可以把一段代码封装成一个功能以便重复使用。
方法的完整格式 package cn.chang.define;public class MethodDemo1 { public static void main(String[] args) { // 目标掌握定义方法的完整定义搞清楚使用方法的好处 // 需求假如现在很多程序员都要进行2个整数的求和 int a1 10; int b1 20; int rs add(a1, b1); System.out.println(rs); int rs2 add(20, 30); System.out.println(rs2); } public static int add( int a, int b ) { int c a b; return c; }}
定义方法其实是定义了一个类方法类方法写在main函数的上面和下面都是可以的。如果是C语言的话写在下面那么在main函数的上面就要声明。
修饰符暂时都使用public static进行修饰。
返回值类型方法声明了具体的返回值类型内部必须使用return返回对应类型的数据。
方法名add
形参列表形参列表可以有多个甚至可以没有如果多个形参多个形参必须用逗号隔开且不能给初始化值。
方法体代码int c a b
return 返回值
使用方法的好处提高了代码的复用性提高了代码的开发效率。让程序的逻辑更清晰。
2.执行
方法要执行必须怎么办
必须进行调用
调用格式方法名称...。
方法必须先创建才能使用该过程成为方法定义。
方法建立后并不是直接运行的需要手动使用后才执行该过程成为方法调用。
方法必须先定义后调用否则程序将报错。
3.方法的其他形式
方法的其他形式
方法定义时需要按照方法解决的实际业务需求来设计合理的方法形式解决问题。
1方法是否需要接收数据处理
2方法是否需要返回数据
package cn.chang.define;public class MethodDemo2 { public static void main(String[] args) { // 目标掌握按照方法解决的实际业务需求不同设计出合理的方法形式来解决问题 // 需求打印3行Hello World printHelloWorld(3); System.out.println(------) printHelloWorld(5); } /** * 有参数无返回值的方法 */ public static void printHelloWorld(int n) { for (int i 1; i n; i) { System.out.println(Hello World); } }}
注意事项
如果方法不需要返回数据返回值类型必须声明成void 无返回值声明此时方法内部不可以使用return返回数据。
方法如果不需要接收数据则不需要定义形参且调用方法也不可以传数据给方法了。
当一个方法没有参数且没有返回值类型void声明的方法称为无参数、无返回值的方法依次类推。
方法使用时的常见问题 package cn.chang.define;public class MethodProbDemo3 { public static void printHelloWorld() { for (int i 1; i 3; i) { System.out.println(Hello World); } } public static void main(String[] args) { // 调用方法 printHelloWorld(); int rs sum(10, 20); System.out.println(rs); System.out.println(sum(40, 60)); sum(100, 200); printHelloWorld(); } public static int sum(int a, int b) { int c a b; return c; }}
设计方法的技巧主要关注三方面
1方法是否需要接收数据进行处理
2方法是否需要返回数据
3方法要处理的业务编程能力
二、方法在计算机中的执行原理
方法被调用的时候是进入到栈内存中运行。方法的运行区域是在栈内存中。
栈的特点是先进后出。push pop。
保证一个方法调用完另一个方法后可以回来。
方法为什么要在栈中运行自己。 sum 执行到return语句会得到返回值30传给rs然后sum方法就从栈中被清理掉。
然后再执行main方法打印rs的结果main方法执行完成main也会从栈中被清理掉。
程序执行完成之后栈里的方法都会被清理。
Java的参数传递机制
java的参数传递机制都是值传递。
实参在方法内部定义的变量。
形参定义方法时所声明的参数。
基本类型的参数传递
所谓值传递指的是传输实参给方法的形参的时候传输的是实参变量中存储的值的副本。
就是将实参变量的值拷贝一份出来传递给形参。
package cn.chang.parameter;public class MethodDemo1 { public static void main(String[] args) { // 目标理解方法的参数传递机制值传递 int a 10; change(a); System.out.println(main a); // 10 } public static void change(int a) { System.out.println(change1 a); // 10 a 20; System.out.println(change2 a); // 20 }} change函数退出之后 引用类型的参数传递
数组传递的是堆内存地址相当于浅拷贝那应该会互相影响的。
也是传递的地址不过是地址的副本也就是拷贝了一份给形参。
这是一节比较特殊的关键课程必须要懂。
package cn.chang.parameter;public class MethodDemo2 { public static void main(String[] args) { // 目标引用类型的参数传递 int[] arr new int[]{10, 20,30}; change(arr); System.out.println(main方法: arr[1]); } public static void change(int[] arr) { System.out.println(方法内1: arr[1]); arr[1] 222; System.out.println(方法内2: arr[1]); }}
三、方法重载
一个类中出现多个方法的名称相同但是它们的形参列表不同的那么这个方法就叫方法重载。
例
package cn.chang.overload;public class MethodOverloadDemo1 { public static void main(String[] args) { //目标认识方法重载掌握应用场景 test(); test(100); } public static void test() { System.out.println(test1); } public static void test(int a) { System.out.println(test2); }}
方法重载的注意事项
一个类中只要一些方法的名称相同形参列表不同。那么它们就是方法重载其他的都不管。如修饰符、返回值类型是否一样都无所谓。 形参列表不同指的是形参、个数、顺序不同不关心形参的名称。
package cn.chang.overload;public class MethodOverloadDemo1 { public static void main(String[] args) { //目标认识方法重载掌握应用场景 test(); test(100); } public static void test() { System.out.println(test1); } public static void test(int a) { System.out.println(test2); } void test(double a) { System.out.println(test3); } int test(int a, double b) { System.out.println(test4); return a; } int test(double b, int a) { System.out.println(test5); return a; }}
return、break、continue三者概念的再理解
return;跳出并立即结束所在方法的执行。
break;跳出并结束当前所在循环的执行
continue;结束当前所在循环的当次继续进入下一发执行
四、案例
案例1买飞机票
用户购买机票的时候机票原价会按照淡季、旺季头等舱还是经济舱的情况进行相应的优惠优惠方案如下5-10月为旺季头等舱9折经济舱8.5折11月到来年4月为淡季头等舱7折经济舱6.5折请开发程序计算出用户当前机票的优惠价。 分析
1方法是否需要接受数据需要接收机票价、当前月份和舱位类型
2方法是否需要返回数据需要返回计算出机票优惠价
3方法内部先使用if判断月份是旺季还是淡季然后使用switch分支判断是头等舱还是经济舱。
package cn.chang;public class Case1 { public static void main(String[] args) { // 目标买飞机票的案例 double price calculate(1000, 8,经济舱); System.out.println(优惠价是 price); } public static double calculate(double price, int month, String type) { // 判断当前月份是淡季还是旺季 if (month 5 month 10) { // 旺季 switch(type) { case 头等舱: price * 0.9; break; case 经济舱: price * 0.85; break; } } else { // 淡季 switch(type) { case 头等舱: price * 0.7; break; case 经济舱: price * 0.65; break; } } return price; }}
案例2开发验证码
开发一个程序可以生成指定位数的验证码每位可以是数字、大小写字母。 分析
1分析方法是否需要接收数据
需要接收一个整数控制生成验证码的位数也就是验证码的长度。
2方法是否需要返回数据
需要返回生成的验证码。
3方法内部的业务
使用for循环依次生成每位随机字符并使用一个String类的变量把每个字符连接起来最后返回该变量即可。
package cn.chang;import java.util.Random;public class Case2 { public static void main(String[] args) { // 目标完成随机验证码 String rs createCode(5); System.out.println(rs); } public static String createCode(int n) { Random random new Random(); String code ; for (int i 1; i n; i) { //为每个位置生成一个随机字符可能是数字、大小写字母//思路随机一个0/1/2之间的数字出来0 代表随机生成一个数字、1/2代表随机大写字母、小写字母 int type random.nextInt(3);switch (type) { case 0: // 随机数字字符 code random.nextInt(10); break; case 1: // 随机大写字母 code (char) (A random.nextInt(26)); break; case 2: // 随机小写字母 code (char) (a random.nextInt(26)); break; } } return code; }} 案例3评委打分
在唱歌比赛中可能有多名评委要给选手打分分数[1-100]之间的整数。选手最后得分为去掉最高分、最低分、剩余分数的平均分请编写程序能够录入多名评委的分数并算出选手的最终得分。
分析
1方法是否需要接收数据进行处理需要接收评委的人数。
2方法是否需要返回数据需要返回计算出选手最终得分。
3方法内部的业务定义动态数组录入评委的分数存到数组中接着我们需要遍历数组中的分数计算出总分并找出最高分和最低分最后按照这些数据算出选手最终得分并返回即可
package cn.chang;import java.util.Scanner;public class Case3 { public static void main(String[] args) { // 案例评委打分 double rs getAverageScore(5); System.out.println(该选手的平均分是: rs); } public static double getAverageScore(int number) { // 使用数组来存储评委分数 int[] scores new int[number]; // 评委打分存到数组中 Scanner sc new Scanner(System.in); System.out.println(开始评委打分); for (int i 1; i number; i) { System.out.print(i 号评委的评分: ); int score sc.nextInt(); scores[i - 1] score; } //求和 int sum 0; int max_value scores[0]; int min_value scores[0]; for (int i 0; i scores.length; i) { int score scores[i]; sum score; if (score max_value) { max_value score; } if (score min_value) { min_value score; } } // 使用sum值减去最高分减去最低分然后再求平均 double average 1.0 * (sum - max_value - min_value) / (number - 2); return average; }}