学习Java第八天

Java方法

所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块

  • 方法声明
  • 语法格式:
  •  访问修饰符 返回类型 方法名(参数列表){
                  方法体
     }
    
  • 方法分类
    • 无参无返回值
    • 无参带返回值
    • 带参无返回值
    • 带参带返回值

无参无返回值

  • 一行打印输出一串星号
package com.method;

import java.util.Scanner;

public class MethodDemo {
	// 打印输出星号的方法
	public void printStar() {
		System.out.println("******************");
		}
	public static void main(String[] args) {
		//创建一个MethodDemo类的对象myMethodDemo
		MethodDemo myMethodDemo=new MethodDemo();
		//使用对象名.方法名()去调用
		myMethodDemo.printStar();
		System.out.println("******************");
		System.out.println("欢迎来到Java的世界");
		System.out.println("******************");
		myMethodDemo.printStar();

	}
}

无参带返回值

  • 求长方形面积
package com.method;

public class Rectangle {
	//求长方形面积的方法
	public int area() {
		int length=10;
		int width=5;
		int Getarea=length*width;
		return Getarea;//返回语句
	}

	public static void main(String[] args) {
        Rectangle rc=new Rectangle();
        System.out.println("长方形的面积为"+rc.area());
	}

}
编程练习
  • 定义一个方法,根据商品总价,计算出对应的折扣并输出。折扣信息如下:
    1) 总价<100,不打折
    2) 总价在100到199之间,打9.5折
    3) 总价在200以上,打8.5折
    4)假设价格为150元
package com.method;

public class DisCountDemo {
	// 根据商品总价输出折后总价
	public float money(float price) {
		if (price < 100) {
			return price;
		} else if (price <= 199) {
			return price * 0.95f;
		} else {
			return price * 0.85f;
		}
	}

	public static void main(String[] args) {
		DisCountDemo dcd = new DisCountDemo();
		// 定义商品总价存放到变量中
		float price = dcd.money(150);
		System.out.println("折后商品总价为:" + price);
		// 调用方法,输出折后商品总价
	}
}

带参无返回值

定义一个求两个float类型数据最大值的方法,在方法中将最大值打印输出

package com.method;

public class MaxDemo {
	//定义一个求最大值的方法
	public void max(float a,float b) {
		float max;
		if(a>b) {
			max=a;
		}else {
			max=b;
		}
		System.out.println("两个数"+a+"和"+b+"的最大值为"+max);
	}
	
	public static void main(String[] args) {
		MaxDemo maxDemo=new MaxDemo();
		int a=3,b=5;
		maxDemo.max(a, b);
        float m=5.6f,n=2.3f;
        maxDemo.max(m, n);
        maxDemo.max(9.2f, 10.1f);
	}
}

带参带返回值

定义一个求 n! 的方法

package com.method;

public class FacDemo {
	//方法不能嵌套定义
	//求阶乘的方法
	public int fac(int n) {
		int s=1;
		for(int i=1;i<=n;i++) {
			s*=i;//s=s*i		
		}
		return s;
	}

	public static void main(String[] args) {
		FacDemo facDemo=new FacDemo();
		int fac=facDemo.fac(3);
		System.out.println("3!="+fac);
		int sum=0;
		//求1!+2!+3!+4!+5!
        for(int i=1;i<=5;i++) {
        	fac=facDemo.fac(i);
        	sum=sum+fac;
        }
        System.out.println("1!+2!+3!+4!+5!="+sum);
	}
}

数组作为方法参数

定义方法,打印输出数组元素的值

package com.method;

public class ArrayMethod {
	public void printArray(int[] arr) {
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+"   ");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		int[] arr= {10,20,30,40,50};
		ArrayMethod am=new ArrayMethod();
		am.printArray(arr);
    }
}
编程练习

编写方法,求数组元素的平均值

package com.method;

public class AverageDemo {
	// 求数组元素的平均值
	public void arrAvg(float[] arr) {
		float sum = 0;
		for (float n : arr) {
			sum = sum + n;
		}
		float avg = sum / arr.length;
		System.out.println("数组的平均值为:" + avg);
	}

	public static void main(String[] args) {
		// 定义对象
		AverageDemo ad = new AverageDemo();
		// 创建float类型的数组并初始化
		float[] arr = { 78.5f, 98.5f, 65.5f, 32.5f, 75.5f };
		// 调用方法求平均值并打印输出
		ad.arrAvg(arr);
	}
}
查找数组元素的值
package com.method;

import java.util.Scanner;

public class ArraySearch {
	// 查找数组元素值的方法
	public boolean search(int n, int[] arr) {
		boolean flag = false;// 默认是没找到
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == n) {
				flag = true;// 找到了
				break;
			}
		}
		return flag;
	}

	public static void main(String[] args) {
		int[] arr1 = { 10, 20, 30, 40, 50, 60 };
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要查找的数据:");
		int n1 = sc.nextInt();
		ArraySearch as = new ArraySearch();
		boolean flag = as.search(n1, arr1);
		if (flag) {
			System.out.println("找到了!");
		} else {
			System.out.println("没找到!");
		}
	}

}

方法重载

方法名相同,参数列表不同

  • 定义三个方法,实现int 、double 和数组类型和的问题
package com.method;

public class MathDemo {
	// 求两个int类型数的和
	public int plus(int m, int n) {
		return m + n;
	}
	// 求两个double类型数的和
	public double plus(double m, double n) {
		return m + n;
	}
	// 求数组元素的累加和
	public int plus(int[] arr) {
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum = sum + arr[i];
		}
		return sum;
	}

	public static void main(String[] args) {
		int m = 5, n = 10;
		int[] arr = { 1, 2, 3, 4, 5, 6 };
		MathDemo mathDemo = new MathDemo();
		System.out.println("int类型的和:" + mathDemo.plus(m, n));
		System.out.println("double类型的和:" + mathDemo.plus(5.6, 7.8));
		System.out.println("数组元素的和:" + mathDemo.plus(arr));

	}

}
编程练习

定义两个重载的方法,分别求圆和长方形的面积

package com.method;

public class AreaDemo {

		// 求圆形面积
		public double area(double radius) {
			return Math.PI * radius * radius;
		}

		// 求长方形面积
		public double area(double width, double height) {		
			return width * height;
		}

		public static void main(String[] args) {
		//定义对象
		AreaDemo areaDemo=new AreaDemo();
		//定义一个double类型的变量存放半径,并初始化
		System.out.println("圆的面积为:"+areaDemo.area(4.5));
		//定义两个变量存放长和宽,并初始化
		System.out.println("长方形面积为"+areaDemo.area(5.0,8.0));
		//调用方法,求圆的面积并打印输出
		//调用方法,求长方形面积并打印输出
		}
}

参数的传递问题

普通变量的传值问题
package com.method;

public class ExchangeDemo {
	//交换方法
	public void swap(int a,int b){
		int temp;
		System.out.println("交换前:a="+a+",b="+b);
		temp=a;a=b;b=temp;
		System.out.println("交换后:a="+a+",b="+b);
	}
	public void swapTest(){
		int m=4,n=5;
		System.out.println("交换前:m="+m+",n="+n);
		swap(m, n);
		System.out.println("交换后:m="+m+",n="+n);

	}
	public static void main(String[] args) {
		ExchangeDemo ed=new ExchangeDemo();
		ed.swapTest();
	}

}

结果 普通变量方法中的变化不会对主方法有影响
在这里插入图片描述

数组作为方法的传值问题
package com.method;

public class ArrayDemo {
    //定义一个用于修改某个数组元素值的方法
	public void updateArray(int[] a){
		a[3]=15;
		System.out.println("数组a的元素为:");
		for(int n:a){
			System.out.print(n+"     ");
		}
		System.out.println();
	}
	public static void main(String[] args) {
		ArrayDemo ad=new ArrayDemo();
		int[] a1={1,2,3,4,5};
		System.out.println("方法调用前数组a1的元素为:");
		for(int n:a1){
			System.out.print(n+"     ");
		}
		System.out.println();
		ad.updateArray(a1);
		System.out.println("方法调用后数组a1的元素为:");
		for(int n:a1){
			System.out.print(n+"     ");
		}
	}
}

结果 引用类型的数组作为方法的变化会对主方法有影响
在这里插入图片描述

可变参数列表

package com.method;

public class ArgsDemo {
    //求和
	public void sum(int... n){
		int sum=0;
		for(int i:n){
			sum=sum+i;
		}
		System.out.println("sum="+sum);
	}
	public static void main(String[] args) {
		ArgsDemo ad=new ArgsDemo();
		ad.sum(1);
		ad.sum(1,2);分别有一个两个三个参数
		ad.sum(1,2,3);
	}
}

结果如下:分别有一个两个三个参数
在这里插入图片描述

  • 可变参数一定是方法的最后一个参数
  • 可以将数组类型传给可变参数列表
  • 注意:数组作为参数时,是不可以将多个值传给数组的
  • 一个方法中只能有一个可变参数
package com.method;

public class ArgsDemo1 {
	//查找
	public void search(int n,int... a){
		boolean flag=false;
		for(int a1:a){
			if(a1==n){
				flag=true;break;
			}
		}
		if(flag){
			System.out.println("找到了!"+n);
		}else{
			System.out.println("没找到!"+n);
		}
	}
	
	public static void main(String[] args) {
		ArgsDemo1 ad1=new ArgsDemo1();
		ad1.search(3,1,2,3,4,5);
		int[] a={1,2,3,4,5};
		ad1.search(3, a);
	}
}

可变参数列表作为方法参数的重载问题以及文档注释

  • 文档注释
  • 可变参数列表所在的方法是最后被访问的
package com.method;
/** 文档注释
 * 关于可变参数列表和重载的问题
 * @author SH
 *
 */
public class ArgsDemo3 {
	//可变参数列表所在的方法是最后被访问的。
	/*
	public int plus(int a,int b){
		System.out.println("不带可变参数的方法被调用!");
		return a+b;
	}*/
	public int plus(int... a){
		int sum=0;
		for(int n:a){
			sum=sum+n;
		}
		System.out.println("带可变参数的方法被调用!");
		return sum;
	}
	public static void main(String[] args) {
		ArgsDemo3 ad=new ArgsDemo3();
		System.out.println("和为:"+ad.plus(1,2));

	}

}

方法的调试

  • 方法的调试和普通调试类似
  • 方法调试可以进入方法内部
  • F5 进入方法内部执行
  • F7 由方法内部返回到调用处

总结

  • 方法的语法格式
  • 方法的重载
  • 可变参数列表
  • 方法的传值问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值