目录

1.方法概述

2.方法定义格式

2.1 方法常见问题

2.2 求和

2.3 判断奇数偶数

2.4 求最值

3.方法的内存原理

3.1 方法的调用流程,内存图解

4.方法的参数传递机制

4.1基本类型传递机制

4.2 引用类型传递

4.3 打印整形数组内容

4.4 数组中查询指定元素的索引

4.5 比较任意两个数组是否一样

5.方法重载

6.单独使用return关键字

7、案例演示

1.买飞机票

2.找素数

3.生成验证码

4.数组复制

5.评委打分

6.数字加密

7.模拟中奖系统


1.方法概述

  • 方法:

    • 一种语法结构,把一段代码封装成一个功能,方便重复使用;

  • 好处:

    • 提高代码复用性;

    • 让程序逻辑更清晰;

2.方法定义格式

完整格式:

修饰符 返回值类型 方法名(形参列表){
​
•   方法体代码(需要执行的功能代码)
​
•   return 返回值;
​
}

2.1 方法常见问题

  • 编写顺序无所谓;

  • 方法间是平级,不能嵌套定义;

  • void,无需return;其他设置类型需return相应类型;

  • 方法不调用,不执行,严格匹配参数情况;

  • 有返回值的方法,调用可以选择定义变量接收结果;

2.2 求和

/*** 计算1-n的和* @param n* @return*/public static int sum(int n){int sum = 0;for (int i = 0; i < n; i++) {sum+=i;}return sum;}

2.3 判断奇数偶数

/*** 判断是奇数还是偶数* @param n* @return*/public static int X(int n){int x;if (n%2==0){x=2;System.out.println(n+"是偶数");}else {x=1;System.out.println(n+"是偶数");}return x;}

2.4 求最值

/*** 求数组最大值* @param array* @return*/public static int MaxArray(int[] array){int max = array[0];for (int i = 1; i <array.length ; i++) {if (max<array[i]){max = array[i];}}return max;}

3.方法的内存原理

3.1 方法的调用流程,内存图解

  • 方法,没有被调用的时候,在方法区的字节码文件中存放;

  • 方法,被调用时候,需要进入到栈内存中运行;

  1. 方法不调用时,存放在方法区;

  2. 方法main运行时,在栈内存开辟空间;

  3. 再调用add方法,再开辟空间,将传入值存在开辟的空间;

  4. 方法使用结束,从栈内存退栈;

4.方法的参数传递机制

4.1基本类型传递机制

  • Java参数传递机制:值传递(不同方法内,只是数值相同);

  • 注意:

    • 实参:方法内部定义变量

    • 形参:定义方法时,()中所声明的参数

 /***    基本类型,值传递*/public static void main(String[] args) {int a=10;chang(a);System.out.println(a);//10}public static int chang(int a){System.out.println(a);//10a=50;System.out.println(a);//50return a;}

4.2 引用类型传递

引用类型:传递地址,修改地址空间内的数据;

 /***    引用类型,地址传递*/public static void main(String[] args) {int[] a={10,2,6};chang(a);System.out.println(a[0]);//50}public static void chang(int[] a){System.out.println(a[0]);//10a[0]=50;System.out.println(a[0]);//50}

4.3 打印整形数组内容

/***    引用类型,地址传递*/public static void main(String[] args) {int[] a={10,2,6};print(a);}public static void print(int[] a){if (a!=null && a.length>0){System.out.println("该数组内容为:"+ Arrays.toString(a));}}

4.4 数组中查询指定元素的索引

/***    数组中查询指定元素的索引*/public static void main(String[] args) {int[] a={10,2,6};int b = 10;System.out.println(select(a, b));}public static int select(int[] a,int b){if (a!=null && a.length>0){for (int i = 0; i < a.length; i++) {if (a[i] == b){return i;}}}return -1;}

4.5 比较任意两个数组是否一样

/*** 比较任意两个数组是否一样*/public static void main(String[] args) {int[] a={10,2,6};int[] b={10,2,6};if (compare(a,b)){System.out.println("两个数组相等");}else {System.out.println("两个数组不等");}}public static boolean compare(int[] a,int[] b){if (a.length != b.length){return false;}
​for (int i = 0; i < a.length; i++) {if (a[i] != b[i]){return false;}}return true;}

5.方法重载

  • 方法重载:

    • 同一个类中,多个名称相同,但形参列表不同,形参类型不同,这些方法就是方法重载;

  • 重载识别技巧:

    • 同一个类,方法名称相同,形参列表不同,就是重载(无关修饰符,返回值类型)

    • 形参列表不同:形参个数,类型、顺序不同,不关心形参名称

 /*** 方法重载* @param args*/public static void main(String[] args) {fire();fire("老A");fire("老A",666);Integer a = 666;System.out.println("嗨嗨"+fire("老A",a));}public static void fire(){fire("老E");}public static void fire(String location){fire(location,1);}public static void fire(String location,int number){System.out.println("给"+location+"的老铁送"+number+"个大火箭!");}//无法以返回值类型区分,可以以形参类型区分public static int fire(String location,Integer number){System.out.println("给"+location+"的老铁送"+number+"个大火箭!");return 666;}

6.单独使用return关键字

  • return:可以立即跳出并结束当前方法的执行

  • break:跳出并结束当前所在的循环

  • continue:跳过当次循环,进入下一次;

7、案例演示

1.买飞机票

/*** 计算飞机票价格*/
public class Test01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入机票价格:");double price = scanner.nextDouble();System.out.println("请输入仓位类型(头等舱、经济舱):");String type =scanner.next();
//         scanner.nextLine();System.out.println("请输入乘机月份(数字):");int month = scanner.nextInt();sum(price,type,month);}//判断月份public static void sum(double price,String type,int month){if (4<month && month<11){type(price,type,0.9,0.85);}else if (month==11 || month==12 || (1<=month && month<=4)){type(price,type,0.7,0.65);}else {System.out.println("月份输入错误!无法计算票价");}}//舱类public static void type(double price,String type,double a,double b){switch (type){case "头等舱":price *= a;break;case "经济舱":price *= b;break;default:System.out.println("舱输入错误!无法计算票价");break;}System.out.println("机票的价格是:"+price);}}

2.找素数

/*** 找素数:*      101-200间有多少素数,并输出所有素数;*      素数:除了1和他本身为,不能被其他整数整除*/
public class Test2 {public static void main(String[] args) {int[] arr = new int[50];boolean flag = false;int n=0;for (int i = 101; i <201 ; i++) {//是否是素数flag=sushu(i);if (flag){//素数,加入数组arr[n]=i;n++;}}System.out.println("101-200有素数:"+n+"个"+arr.length);System.out.println(Arrays.toString(arr));}//判断素数素数public static boolean sushu(int i){for (int j = 2; j <i ; j++) {if (i%j == 0){//能整除,非素数return false;}}return true;}
}

3.生成验证码

/*** 5位验证码:*      可能是数字、大小写字母*/
public class Test3 {public static void main(String[] args) {String code = createCode(5);System.out.println(code);}//生成n位验证码public static String createCode(int n){String code = "";Random random = new Random();for (int i = 0; i < n; i++) {int type = random.nextInt(3);//0-2//选验证码类型switch (type){case 0://大写字符 A65 Z65+26char c = (char) (random.nextInt(26)+65);code += c;break;case 1://小写字符 a97  z 97+26char cc = (char) (random.nextInt(26)+97);code += cc;break;case 2:code += random.nextInt(10);break;}}return code;}
}

4.数组复制

/*** 复制数组:*  数组元素赋值给新数组*/
public class Test4 {public static void main(String[] args) {int[] arrOne = {10,20,30,40,50,66};int[] arrTwo = new int[arrOne.length];for (int i = 0; i < arrOne.length; i++) {arrTwo[i] = arrOne[i];}System.out.println(Arrays.toString(arrTwo));}
}

5.评委打分

/*** 评委打分:*      六位评分,去掉最高和最低,取平均*/
public class Test5 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入几位评委打分:");int num = scanner.nextInt();int[] users = new  int[num];for (int i = 0; i < num; i++) {System.out.println("请输入第"+(i+1)+"位评委的评分(1-10分)");users[i] = scanner.nextInt();}//评分从小到大order(users,num);//最终得分avg(users,num);}//冒泡排序,评分从小到大整理public static void order(int[] users,int num){for (int i = 0; i < num-1; i++) {for (int j = 0; j < num-i-1; j++) {if (users[j]>users[j+1]){int temp = users[j+1];users[j+1] = users[j];users[j] = temp;}}}System.out.println(Arrays.toString(users));}//取平均值public static void avg(int[] users,int num){double score = 0;for (int i = 1; i < num-1 ; i++) {score += users[i];}double avgScore = score/(num-2);System.out.println("选手最终得分:"+avgScore);}}

6.数字加密

/*** 数字加密规则:*     得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)*/
public class Test6 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一串正整数字:");String num = scanner.next();int length = num.length();//快速获取int位数//int length1 = String.valueOf(number).length();int[] passOne = new  int[length];for (int i = 0; i < length; i++) {//取字符num每位char字符,转为String,再转intpassOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));}System.out.println(Arrays.toString(passOne));//+5%10for (int i = 0; i < length; i++) {passOne[i] = (passOne[i]+5)%10;}System.out.println(Arrays.toString(passOne));//取反for (int i = 0,j=length-1; i < j; i++,j--) {int temp = passOne[i];passOne[i] = passOne[j];passOne[j] = temp;}System.out.println(Arrays.toString(passOne));}}

6.1数字解密


/*** 数字解密规则:*     得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)原0-4 加密后是5-9原5-9 加密后是0-4*/
public class Test7 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一串正整数字:");String num = scanner.next();int length = num.length();int[] passOne = new  int[length];for (int i = 0; i < length; i++) {//取字符num每位char字符,转为String,再转intpassOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));}System.out.println(Arrays.toString(passOne));//取反for (int i = 0,j=length-1; i < j; i++,j--) {int temp = passOne[i];passOne[i] = passOne[j];passOne[j] = temp;}System.out.println(Arrays.toString(passOne));//解密:分析变化规则for (int i = 0; i < length; i++) {if (0<=passOne[i] && passOne[i]<5){passOne[i] = passOne[i]+5;}else {passOne[i] = passOne[i]-5;}}System.out.println(Arrays.toString(passOne));}}

7.模拟中奖系统

/*** 双色球系统:*     投注号码由6个红球号码和1个篮球号码组成*     红球号从1-33中选(不可重复);篮球号码从1-16中选*/
public class Test8 {public static void main(String[] args) {int[] luckNumbers = createLuckNumbers();int[] userNumbers = userInputNumbers();judge(luckNumbers,userNumbers);}//生成中奖号码public static int[] createLuckNumbers(){Random random = new Random();int[] luckNumbers = new int[7];for (int i = 0; i < luckNumbers.length-1; i++) {while (true){int date = random.nextInt(33)+1;boolean flag = true;for (int j = 0; j <i ; j++) {//出现重复值if (luckNumbers[j] == date){flag = false;break;}}//不重复的值加入if (flag){luckNumbers[i] = date;break;//结束while}}}luckNumbers[luckNumbers.length-1] = random.nextInt(16)+1;
//        System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));return luckNumbers;}//用户输入号码public static int[] userInputNumbers(){Random random = new Random();int[] userNumbers = new int[7];Scanner scanner = new Scanner(System.in);System.out.println("请输入双色球号码前六位(1-33),最后一位(1-16):");while (true){System.out.println("请输入第1位号码:");int date = scanner.nextInt();if (0<date && date<34){userNumbers[0] = date;break;}else {System.out.println("有误:请输入(1-33)的数字:");}}for (int i = 1; i < userNumbers.length-1; i++) {while(true){System.out.println("请输入第"+(i+1)+"位号码:");int date = scanner.nextInt();if (0<date && date<34){boolean flag = false;for (int j = 0; j <i ; j++) {//出现重复值if (userNumbers[j] == date){System.out.println("请不要输入重复数字:");flag=true;break;}}if (flag){continue;}}else {System.out.println("请输入(1-33)的数字:");continue;}//不重复的值加入userNumbers[i] = date;break;}}while (true){System.out.println("请输入第7位号码:");int date = scanner.nextInt();if (0<date && date<17){userNumbers[userNumbers.length-1] = date;break;}else {System.out.println("请输入(1-16)的数字:");}}//        System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));return userNumbers;}//判断中奖情况public static void judge(int[] luckNumbers,int[] userNumbers){System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));boolean blue = false;if (luckNumbers[luckNumbers.length-1] == userNumbers[userNumbers.length-1]){blue = true;System.out.println("恭喜您命中了篮球");}else {System.out.println("很遗憾,您没有命中篮球");}int count = 0;for (int i = 0; i < luckNumbers.length-1; i++) {if (luckNumbers[i] == userNumbers[i]){count++;}}if (count>0){System.out.println("恭喜您命中了"+count+"个红球");}else {System.out.println("很遗憾,您没有命中红球");}if (blue){switch (count){case 6:System.out.println("恭喜中了1000万元");break;case 5:System.out.println("恭喜中了3000元");break;case 4:System.out.println("恭喜中了200元");break;case 3:case 2:System.out.println("恭喜中了10元");break;case 1:System.out.println("恭喜中了5元");break;default:System.out.println("很遗憾,没中奖");break;}}else {switch (count){case 6:System.out.println("恭喜中了500万元");break;case 5:System.out.println("恭喜中了200元");break;case 4:System.out.println("恭喜中了10元");break;default:System.out.println("很遗憾,没中奖");break;}}}}

Java复习笔记入门阶段06:方法相关推荐

  1. Java复习笔记(8)——网络

    一:网络的结构 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由 1.0 转化为电流强弱来进行传输,到达目的地后转化为1.0, ...

  2. Java基础笔记(入门,语法基础,流程控制,数组)

    Java语言入门 发展历程 三大技术体系 JavaSE 标准版 JavaEE 企业版 JavaME 嵌入式版 Java语言特点 简单性 健壮性 面向对象 分布式 多线程 动态性 可移植性(跨平台) J ...

  3. 0040 Java学习笔记-多线程-线程run()方法中的异常

    run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...

  4. 大四Java复习笔记之Java基础

    2019独角兽企业重金招聘Python工程师标准>>> 一.static和final 学习Java那么久,好像自己就没有怎么用过final,所以对fianl的理解不够.final不但 ...

  5. 【Java】Java复习笔记-第三部分

    修饰符abstract 抽象的,定义框架不去实现,可以修饰类和方法 abstract修饰类: 会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型 抽象类 ...

  6. Java 复习笔记 线程Thread

    1概念: 进程:运行中的应用程序  线程:进程中的一个执行流程 2区别 进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的. 线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比 ...

  7. Java 复习笔记 异常Exception

    1定义 程序在运行过程中发生由于硬件设备问题.软件设计错误等导致的程序异常事件.异常本身是一个对象,产生异常就是产生了一个异常对象.如果不捕获异常,程序将在发生异常代码的地方中断,导致应用退出,而捕获 ...

  8. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

    方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...

  9. java复习笔记4--SpringCloud系列二:五大神兽之Eureka

    前面两天介绍了SpringCloud的基础知识,以及窥探了一下加载流程,整个代码还是很长并且晦涩的,一定要多debug去跟进,看每个对象何时创建和赋值,一步步跟着走,这样才能对整个流程有一个很好的了解 ...

最新文章

  1. java 图片合成 工具类_Java实现的图片上传工具类完整实例
  2. UIUC教授季姮:叫我带头人,而不是女性带头人(附视频)
  3. 解决SVN 每次操作都需要重输入用户名密码问题
  4. python 为什么每次代码运行时间不同-python – 气流在同一个dag的不同时间运行任......
  5. mysql性能优化的一些建议
  6. 一个罐子统治一切:Apache TomEE + Shrinkwrap == JavaEE引导
  7. Background-size完美兼容IE
  8. oracle查询相同想,返回相同总和的查询-Oracle SQL
  9. html textarea粘贴事件,javascript在textarea中捕获粘贴事件
  10. Linux手势控制软件,让 linux 实现触摸板多点触控与手势操作
  11. mysql 查询价格区间,mysql统计数量_MySQL统计价格区间内的商品数量sql语句
  12. 《月亮与红蜘蛛》王巧琳
  13. Htmlcssjs 图片轮播,加箭头
  14. unity给头发添加物理_U3D实时渲染教程之角色头发各向异性表达(上)
  15. 苹果手机的高德地图的位置服务器,苹果手机高德地图家人地图在哪
  16. 最新易企秀 微场景制作源码 易企秀去版权源码 带几百套模板
  17. 曲面积分的投影法_三重积分的投影法与截面法
  18. python删除excel某行的格式_Python+Xlwings 删除Excel的行和列
  19. 苹果X 顶部和底部留白问题
  20. 解决pprint安装不上 | pprint_一个漂亮的打印机

热门文章

  1. 图书借阅管理用java实现_用java实现图书管理系统。 - 惊觉...
  2. SPFA+寻路(行路难,洛谷2832)
  3. MFC 对话框打印和打印预览知识总结
  4. twitch.tv 聊天特殊表情符号
  5. 领导圈子里流传的10个小故事
  6. 粤嵌GEC6818开发板-入门感慨篇
  7. NestJS 7.x 折腾记: (3) 采用nestjs-pino作为Nest logger
  8. 计算机三级网络技术小技巧,计算机三级PC技术过关心得技巧
  9. arduino yun 京东_ArduinoYun教程之配置Arduino Yun环境
  10. 数学题 识别 批改 python_准确率99.9%!AI批改数学题,误判率仅为人工1/10,计算填空应用题都能批改...