一、答案
首先公布一下上期作业答案哈:
1、键盘录入两个数据,返回两个数里面的最大值;
做题之前需要先搞清楚两点:
① 返回值类型:int
② 参数列表:int a和 int b
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
int result = max(a,b);
System.out.println("较大数为:"+result);
}
public static int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
}
请输入第一个数据:
80
请输入第二个数据:
55
较大数为:80
Process finished with exit code 0
也可以写成:
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
int result = max(a,b);
System.out.println("较大数为:"+result);
}
public static int max(int a,int b){
int max=((a>b)?a:b);
return max;
}
}
顺便提一句,在这段代码中,由于int max 等于((a>b)?a:b),所以最后一行也可以写为:return ((a>b)?a:b);
2、键盘录入两个数据,比较两个数据是否相等
做题之前需要先搞清楚两点:
① 返回值类型:Boolean
② 参数列表:int a和 int b
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
boolean result = than(a,b);
System.out.println("结果为:"+result);
}
public static boolean than(int a,int b){
if(a==b){
return true;
}else{
return false;
}
}
}
请输入第一个数据:
55
请输入第二个数据:
33
结果为:false
Process finished with exit code 0
也可以写成:
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
boolean result = than(a,b);
System.out.println("结果为:"+result);
}
public static boolean than(int a,int b){
boolean than=((a==b)?true:false);
return than;
}
}
请输入第一个数据:
40
请输入第二个数据:
40
结果为:true
Process finished with exit code 0
当然在这道题中,你也可以像前一题那样,return ((a==b)?true:false)
甚至是return (a==b)?
3、键盘录入三个数据,返回三个数中的最大值
可以写成:
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
System.out.println("请输入第三个数据:");
int c=sc.nextInt();
int result = max(a,b,c);
System.out.println("最大值为:"+result);
}
public static int max(int a,int b,int c){
if(a>b){
if(a>c){
return a;
}else{
return c;
}
}else{
if(b>c){
return b;
}else{
return c;
}
}
}
}
请输入第一个数据:
40
请输入第二个数据:
55
请输入第三个数据:
69
最大值为:69
Process finished with exit code 0
也可以写成:
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
System.out.println("请输入第三个数据:");
int c=sc.nextInt();
int result = max(a,b,c);
System.out.println("最大值为:"+result);
}
public static int max(int a,int b,int c) {
if(a>b){
return (a>c)?a:c;
}else{
return (b>c)?b:c;
}
}
}
甚至还可以写成:
import java. util. Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a=sc.nextInt();
System.out.println("请输入第二个数据:");
int b=sc.nextInt();
System.out.println("请输入第三个数据:");
int c=sc.nextInt();
int result = max(a,b,c);
System.out.println("最大值为:"+result);
}
public static int max(int a,int b,int c) {
return (a>b)?(a>c?a:c):(b>c?b:c);
}
}
二、方法注意事项
关于方法的知识点,我们之前讲了很多,现在归总一下使用方法时的注意事项。
1、方法不调用不执行
2、方法与方法时平级关系,不能嵌套定义
3、方法定义的时候,参数之间用逗号隔开
4、方法调用的时候不用再传递数据类型
5、如果方法有明确的返回值,一定要有return带回一个值
具体的例子,就不一一枚举了,大家可以从之前的内容里找。
三、void类型方法的定义和调用
void在Java里翻译为,空。
空的方法是什么意思,具体有咩用处呢?
1、定义
顾名思义,空就是没有,也就是说,void类型的方法在调用的时候,不需要向调用者返回函数值。
举个例子大家就明白了……
🌰 请在控制台输出一个4行5列的星星图案
public class demon {
public static void main(String[] args) {
for(int x=0;x<4;x++){
for(int y=0;y<5;y++) {
System.out.print("*");
}
System.out.println();
}
}
}
通过前几篇的学习,这段代码大家应该不陌生(说陌生的小伙伴请去自行面壁🎃)。
现在请思考一个问题,如果这段代码在一个大型程序里面,且需要经常出现而且每次行列数的要求还都不一样,怎么办?
答案是:需要用到方法,编写一个m行n列的代码就可以实现。
public class demon {
public static void main(String[] args) {
}
public static void star(int m,int n){
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
System.out.print("*");
}
System.out.println();
}
}
}
代码里没有明确的返回值(return),这种方法就是void方法类型,参数列表为int m,int n
2、调用
方法写完了,现在的问题是怎么调用。
还记得前一篇我们说过,方法调用的三种方式吧:
① 单独调用,没有意义;
② 输出调用,有意义,但不够完美,因为程序员不一定非要把结果输出;
③ 赋值调用,推荐方式。
逐个使用一下,答案就有了。
① 赋值调用
public class demon {
public static void main(String[] args) {
//赋值调用
void v=star(4,5);
}
public static void star(int m,int n){
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
System.out.print("*");
}
System.out.println();
}
}
}
输出结果为:
java: 非法的表达式开始
可见,void方法不能使用赋值调用❌
② 输出调用
public class demon {
public static void main(String[] args) {
//输出调用
System.out.println(star(4,5));
}
public static void star(int m,int n){
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
System.out.print("*");
}
System.out.println();
}
}
}
输出结果为:
java: 此处不允许使用 '空' 类型
可见,void方法不能使用输出调用❌
③ 单独调用
public class demon {
public static void main(String[] args) {
//单独调用
star(4,5);
}
public static void star(int m,int n){
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
System.out.print("*");
}
System.out.println();
}
}
}
输出结果为:
*****
*****
*****
*****
Process finished with exit code 0
可见,void方法可以使用输出调用⭕
四、练习题
1、键盘录入行数、列数,输出对应星形;
首先明确两点:
①:返回值类型——void
②:参数列表——int m,int n
import java.util.Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入行数:");
int m=sc.nextInt();
System.out.println("请输入列数:");
int n=sc.nextInt();
//void 类型的方法调用
daxingxing(m,n);
}
public static void daxingxing(int m,int n){
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
System.out.print("*");
}
System.out.println();
}
}
}
请输入行数:
6
请输入列数:
9
*********
*********
*********
*********
*********
*********
Process finished with exit code 0
2、键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表
首先明确两点:
①:返回值类型——void
②:参数列表——int n
import java.util.Scanner;
public class demon {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入n的值(1~9):");
int n=sc.nextInt();
//void 类型的方法调用
printN(n);
}
public static void printN(int n){
for (int x = 1; x <=n; x++) {
for (int y = 1; y <=x; y++) {
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}
请输入n的值(1~9):
4
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
Process finished with exit code 0
五、方法重载概述和基本使用
1、定义
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数,或者参数类型不同即可。
啥意思?
(个_个)
比如说,我现在有这样一个需求:求两个数的和;
那么根据之前讲过的,代码可以写成(不调用):
public class demon {
public static void main(String[] args) {
}
public static void sum(int a,int b){
return a+b;
}
}
}
在这里,我们给这个方法取名为sum。
现在改变一下需求,我想求三个数的和,那么这个方法名可以改为sum1
public class demon {
public static void main(String[] args) {
}
public static void sum1(int a,int b,int c){
return a+b+c;
}
}
以此类推,求四个数之和,方法名为sum2
public class demon {
public static void main(String[] args) {
}
public static void sum2(int a,int b,int c,int d){
return a+b+c+d;
}
}
不知道大家是否还记得最开始我们说过,Java是强类型语言,对方法的命名要做到,见名知意。
比如main,虚拟机见到后就明白这是一个main方法,sum,是求和。但sum1和sum2这两个名字,很显然就有点差强人意。
针对不断发生改变的需求,所产生的多个求和方法名称,在Java里就规定:在方法的功能相同,参数列表不同的情况下,为了见名知意,允许起一样的名字,即方法重载。
由此,上面几个例子可以改为:
public class demon {
public static void main(String[] args) {
System.out.println(sum(50,34));
System.out.println(sum(12,34,78));
System.out.println(sum(2,56,90,33));
}
public static int sum(int a,int b){
return a+b;
}
public static int sum(int a,int b,int c){
return a+b+c;
}
public static int sum(int a,int b,int c,int d){
return a+b+c+d;
}
}
84
124
181
Process finished with exit code 0
JVM能根据不同的参数,调用不同的功能。
是不是很聪明 (* ̄︶ ̄)
2、方法重载的特点
根据上面的例子,不难看出方法重载的特点:
①、与返回值类型无关,只看方法名和参数列表;
②、在调用时,虚拟机通过参数列表的不同(参数个数不同/参数类型不同)来区分同名方法。
前面举的例子是参数个数不同,现在再举一个参数类型不同的例子。
public class demon {
public static void main(String[] args) {
System.out.println(sum(50,34));
System.out.println(sum(12,34,78));
System.out.println(sum(10.5f,6f));
}
public static int sum(int a,int b){
return a+b;
}
public static int sum(int a,int b,int c){
return a+b+c;
}
public static float sum(float a,float b){
return a+b;
}
}
84
124
16.5
Process finished with exit code 0
这里要注意一下Java的自动类型转换:
①、小类型自动转换为大类型;比如short、byte、char转int
②、整数类型自动转换为浮点类型,可能会产生误差;
③、字符型自动转换为整数类型。
六、方法重载练习
比较两个数据是否相等,参数类型分别为两个byte,两个short,两个int,两个long,并在main方法中进行测试。
首先明确两点:
①、返回值类型:Boolean
②、参数列表:byte(short/int/long)a,byte(short/int/long)b
public class demon {
public static void main(String[] args) {
//测试
byte c1 = 3;
byte c2 = 7;
System.out.println("byte" +":"+ compare(c1, c2));
}
//byte类型
public static boolean compare(byte a, byte b) {
return a > b;
}
//int类型
public static boolean compare(int a, int b) {
return a > b;
}
//short类型
public static boolean compare(short a, short b) {
return a > b;
}
//long类型
public static boolean compare(long a, long b) {
return a > b;
}
}
byte:false
Process finished with exit code 0
例题里面只测试byte类型,剩下的请自行测试。
Thanks♪(・ω・)ノ for read……
部分图片来自网络,侵权立删