概念
一段具有独立功能的代码块,调用之后执行
代码块:在一对大括号中的多行代码
作用
- 代码不需要全部堆积在main方法里面
- 自由控制功能的调用
- 提高代码的复用性
格式
基础版本
public static void 方法名() {
// 方法体
}
1.方法定义位置:类里面,与main方法平级
2.方法的调用:方法名();
public class Method {
public static void main(String[] args) {
prin();
sum();
}
/**
* 求两个整数和的方法
*/
public static void sum(){
Scanner sc = new Scanner(System.in);
System.out.println("录入两个整数");
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("和:" + (a+b));
}
/**
* 打印1-100的整数
*/
public static void prin(){
for (int i = 1; i < 101; i++) {
System.out.println(i);
}
}
}
带参版本
定义格式
public static void 方法名 (参数 ) { … … }
public static void 方法名 (数据类型 变量名,数据类型 变量名2 ) { … … }
单个参数:
public static void 方法名 ( 数据类型 变量名 ) { … … }
范例(单个参数):
public static void method( int number) { … … }
格式(多个参数):
public static void 方法名 ( 数据类型 变量名1,数据类型 变量名2 ,…… ) { … … }
范例(多个参数):
public static void getMax( int number1,int number2 ) { … … }
//方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错
//方法定义时,多个参数之间使用逗号(,)分隔
调用格式
方法名(参数);
方法名 ( 变量名/常量值 ) ;
method(5);
方法名 ( 变量名1/常量值1 ,变量名2/常量值2 ) ;
getMax(5,6 ) ;
//方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
形参与实参
形式参数:形参
,方法定义时小括号里的变量,只声明不赋值的变量。
实际参数:实参
,方法调用的时候给的参数,实参是具有具体值的,就是用来给形参赋值的。
/**
* 带参数版本方法
*/
public class MethodWithArgument {
public static void main(String[] args) {
fight(9,10);
int a = 100;
int b = 20;
//个数要一致,数据类型要一致,但是变量名字不需要一致
fight(a,b);
}
/**
*打架
* @param my 我方人数
* @param enemy 敌方人数
*/
public static void fight(int my,int enemy){
if (my>enemy){
System.out.println("打赢坐牢");
}else {
System.out.println("打输住院");
}
}
}
练习
/**
* 设计一个方法(print) 用于打印 n 到 m 之间所有的奇数
* 设计一个方法(getMax) 这个方法可以打印 任意 3个整数中的最大数
* 设计一个方法(printArrSum) 这个方法可以打印 一个任意int数组中各个元素的和
* 定义一个方法 把任意字符数组当中的字符拼接成一个字符串并输出
*/
public class Test {
public static void main(String[] args) {
print(50, 20);
System.out.println();
getMax(10,20,500);
int[] arr ={99,66,33,55,44,66};
printArrSum(arr);
printArrSum(new int[] {1,2,3,4,5});
stringSplicing(new char[]{'a','b','a'});
}
/**
* 打印 n-m 之间的所有奇数
*
* @param n 一个整数
* @param m 一个整数
*/
public static void print(int n, int m) {
if (n > 0 && m > 0) {
if (n < m) {
for (int i = n; i <= m; i++) {
if (i % 2 == 1) {
System.out.print(i+"\t");
}
}
} else {
for (int i = m; i <= n; i++) {
if (i % 2 == 1) {
System.out.print(i+"\t");
}
}
}
} else {
System.out.println("参数传入错误");
}
}
/**
* 打印 任意3个整数中的最大值
*
* @param num1 一个整数
* @param num2 一个整数
* @param num3 一个整数
*/
public static void getMax(int num1, int num2, int num3) {
if (num1 > 0 && num2 > 0 && num3 > 0) {
int max = num1 > num2 ? num1 : num2;
System.out.println(max > num3 ? max : num3);
} else {
System.out.println("参数传入错误");
}
}
/**
* 打印任意数组的和
* @param arr 任意数组
*/
public static void printArrSum(int[] arr){
int sum =0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("数组的和是:"+sum);
}
/**
* 字符拼接字符串
* @param a 任意char类型数组
*/
public static void stringSplicing(char[] arr){
String b ="";
for (int i = 0; i < arr.length; i++) {
b+=arr[i];
}
System.out.println(b);
}
}
带返回值版本
public static 结果的数据类型 方法名 (数据类型 变量名1,数据类型 变量名2... ) {
return 返回值;//将方法的运行结果返回给调用者
}
返回值:方法执行完后的结果
方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
return关键字注意
return
关键字作用:返回一个值,终止方法的运行void
的方法也可以写return
,后面什么都不加return
后面不能直接写代码switch
里面也可以搭配return
,并且具有break
作用- 一个方法内可以有多个
return
,但是必须处在不同的作用域内
/**
* 具有返回值的方法
*/
public class MethodWithReturn {
public static void main(String[] args) {
int[] arr ={1,2,3,4,5,6,7,8,9};
int arrSum = getArrSum(arr);
System.out.println((double) arrSum/arr.length);
}
/**
* 求数组和
* @param arr 一个数组
* @return 返回和
*/
public static int getArrSum(int[] arr){
int sum =0;
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
return sum;
}
}
练习
/**
* 需求:
* 1.定义一个方法,该方法可以给水果称重算钱(方法名:weigh)
* 2.定义一个方法,该方法可以转账付钱,在方法里面就写一条输出语句(本次转账....钱)
*/
public class Test1 {
public static void main(String[] args) {
double weigh = weigh(100, 555);
pay(weigh);
}
/**
* 给水果称重算钱
*
* @param weight 重量
* @param unitPrice 单价
* @return 总计
*/
public static double weigh(double weight, double unitPrice) {
return weight * unitPrice;
}
/**
* 该方法可以转账付钱
* @param money 钱
*/
public static void pay(double money) {
System.out.println("本次转账" + money);
}
}
通用版本
方法的定义格式:
public static 返回值类型 方法名(参数类型 参数名,参数类型2 参数名2,.....){
方法体;
return 返回值;
}
例如:
public static int getMax(int a,int b){
int max = a>b?a:b;
return max;
}
返回值 :就这件事情做完之后的结果
返回值类型: 这件事情做完后的结果的数据类型
方法名:这件事情的名字
参数:做这件事情需要的东西
参数类型 : 参数的数据类型
参数名:就是给参数取的一个名字return :用来返回最终的结果. 两个作用,第一结束当前方法,第二将后面的返回值还给调用处
方法的构成
包含了三要素:
- 返回值
- 方法名
- 参数列表
方法签名:(第二要素+第三要素)
注意事项
方法不能嵌套定义,各个方法之间是平级关系
方法的返回值类型为void
,表示该方法没有返回值,没有返回值的方法可以省略return
语句不写。如果要编写return
,后面不能跟具体的数据。
方法的重载
方法重载(Overload)的定义:
在同一个类中,方法名相同,参数列表不同的方法才叫重载参数列表不同:
- 参数个数不同
- 参数类型不同
- 参数的多类型顺序不同
注意:看参数列表是否相同的时候和参数名没有关系
作业
定义一个方法,该方法可以求任意一个三位数的各个位数的立方和。定义并且调用该方法。
定义一个方法,该方法可以求1~n的和 。n的值是方法调用时传入
定义一个方法,该方法可以求数组的平均值 ,具体的数组是方法调用时传入
定义方法 完成打印十遍HelloWorld
定义一个方法,能够完成对比较三个数的最大值,并将最大值打印,三个数要求使用键盘录入
定义方法,用于计算数组中的最大值和最小值,将最大值和最小值返回
定义一个方法,该方法可以判断两个数组是否完全一致(长度一致,内容一致,顺序一致,称之为完全一致。)
例如:{1,2,3} 和{1,2,3} 是完全一致的。{1,2,3} 和{3,2,1} 不是完全一致的
import java.util.Scanner;
/**
* @author DS_xiao_jian
* @date 2023.04.03 下午 06:18:00
*/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
cubicSum(333);
sum(2);
arrayAverage(new int[]{1, 2, 3});
printHelloWorld();
System.out.println("请录入3个整数");
compareSizes(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
maxAndMin(new int[]{5, 2, 20, 9, 3});
System.out.println(judgmentArray(new int[]{5, 2, 20, 9, 3},new int[]{5, 2, 20, 9, 3}));
}
/**
* 计算三位数的各个位数的立方和
*
* @param num 任意三位数
*/
public static void cubicSum(int num) {
//个位
int individualBits = num % 10;
//十位
int ten = num / 10 % 10;
//百位
int hundreds = num / 100;
System.out.println("个位立方和" + (individualBits * individualBits * individualBits));
System.out.println("十位立方和" + (ten * ten * ten));
System.out.println("白位立方和" + (hundreds * hundreds * hundreds));
}
/**
* 求1~n的和
*
* @param n 任意整数
*/
public static void sum(int n) {
int sum = 0;
for (int i = 0; i <= n; i++) {
sum += i;
}
System.out.println("1~" + n + "的和是:" + sum);
}
/**
* 求数组的平均值
*
* @param arr 任意整数数组
*/
public static void arrayAverage(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("数组的平均值是:" + ((double) sum / arr.length));
}
/**
* 打印十遍HelloWorld
*/
public static void printHelloWorld() {
for (int i = 0; i < 11; i++) {
System.out.println("HelloWorld");
}
}
/**
* 键盘录入三个整数比较大小
*
* @param num1 任意整数
* @param num2 任意整数
* @param num3 任意整数
*/
public static void compareSizes(int num1, int num2, int num3) {
int temp = num1 > num2 ? num1 : num2;
System.out.println("最大值为" + (temp > num3 ? temp : num3));
}
/**
* 计算数组中最大值与最小值
* @param arr 任意整数数组
*/
public static void maxAndMin(int[] arr) {
int max = arr[0];
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
if (min > arr[i]){
min = arr[i];
}
}
System.out.println("最大值为" + max);
System.out.println("最小值为" + min);
}
/**
* 判断两个数组是否完全一致
* @param arr1 任意一个整数数组
* @param arr2 任意一个整数数组
* @return true 完全一致 false 不是完全一致
*/
public static boolean judgmentArray(int[] arr1,int[] arr2){
if (arr1.length!=arr2.length){
return false;
}else {
for (int i = 0; i < arr1.length; i++) {
if (arr1[i]!=arr2[i]){
return false;
}
}
}
return true;
}
}