• 009面向对象编程(上)-2


    方法的重载、可变个数形参

    image-20210124140612294

    image-20210124140954736

    本质上两种都是一样的,传递的是数组

    image-20210124141742871

    package com.atguigu.exer;
    
    /*
     * 测试可变个数形参传递机制
     */
    public class ArraysPassTest {
    	public static void main(String[] args) {
    		ArraysPassTest test = new ArraysPassTest();
    //		String[] temp = new String[]{"hello","World","Test"};
    		test.print(new String[]{"hello","World","Test"}); //传递匿名数组
    		test.print("Printing");
    	}
    	public void print(String arr){
    		System.out.println(arr);
    	}
    	public void print(String... arr){
    		//输出数组
    		for(int i = 0; i < arr.length; i++){
    			if(i == 0){
    				System.out.print("[ " + arr[i]);
    			}else if(i > 0 && i < arr.length - 1){
    				System.out.print(", " + arr[i]);
    			}else{
    				System.out.println(", " + arr[i] + " ]");
    			}
    			
    		}
    	}
    }
    

    方法的值传递

    image-20210124144936488

    例1

    image-20210124145641011

    image-20210124145655817

    例2

    image-20210124145910289

    image-20210124145933582

    例3

    image-20210124150019660

    image-20210124150033780

    练习1:替换要输入的值

    image-20210124150348665

    package com.atguigu.exer;
    
    public class PrintTest {
    	public static void main(String[] args) {
    		int a = 10;
    		int b = 10;
    		method(a,b);
    		System.out.println(a);
    		System.out.println(b);
    	}
    	public static void method(int a, int b){
    		a = 100;
    		b = 200;
    		System.out.println(a);
    		System.out.println(b);
    		System.exit(0);//退出程序
    	}
    }
    

    练习2:除后并赋值

    image-20210124150929461

    package com.atguigu.exer;
    
    import java.util.Arrays;
    
    /*
     * 定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432};
    让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的 新值。遍历新的数组。
     */
    public class PrintTest01 {
    	public static void main(String[] args) {
    		int[] arr = new int[]{12,3,3,34,56,77,432};
    		for(int i = arr.length - 1; i >= 0; i--){
    			arr[i] = arr[i]/arr[0];
    		}
    		System.out.println(Arrays.toString(arr));
    	}
    }
    

    练习3:熟悉char类型数组

    image-20210124151706793

    package com.atguigu.exer;
    
    public class PrintCharArr {
    	public static void main(String[] args) {
    		int[] arr = new int[10];
    		System.out.println(arr); //地址值
    		
    		char[] arr1 = new char[10]; 
    		System.out.println(arr1); //什么都没有
    		
    		char[] arr2 = new char[]{'a','b','c'}; 
    		System.out.println(arr2); //abc
    	}
    }
    

    练习4:将对象作为参数传递给方法

    image-20210124154420489

    package com.atguigu.exer;
    /*
     * 定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个
    findArea()方法返回圆的面积。
    定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义
    如下:public void printAreas(Circle c, int time)
    在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
     例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
    在main方法中调用printAreas()方法,调 用完毕后输出当前半径值。程序运行结果如图 所示。
    
     */
    public class CircleTest {
    	public static void main(String[] args) {
    		PassObject passObject = new PassObject();
    		passObject.printAreas(new Circle(), 5);
    	}
    }
    
    class Circle{
    	double radius;
    	public double findArea(double radius){
    		return Math.PI * radius * radius;
    	}
    }
    
    class PassObject{
    	public void printAreas(Circle c, int time){
    		System.out.println("Radius		Area");
    		int i = 1;
    		for(; i <= time; i++){
    			c.radius = i;
    			System.out.println(c.radius + "		" + c.findArea(c.radius));
    		}
    		System.out.println("now radius is: " + (double)i);
    	}
    }
    

    递归方法

    image-20210124154956868

    练习1:输出阶乘

    package com.atguigu.exer;
    
    /*
     * 请用Java写出递归求阶乘(n!)的算法
     */
    public class AriTest01 {
    	public static void main(String[] args) {
    		AriTest01 test = new AriTest01();
    		System.out.println(test.ari(10));
    	}
    
    	public int ari(int sum){
    		if(sum == 1){
    			return 1;
    		}else{
    			return sum * ari(sum - 1); 
    		}
    	}
    }
    

    练习2:f(n+2)=2*f(n+1) + f(n)

    package com.atguigu.exer;
    /*
     * 已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0
    的整数,求f(10)的值。
    
     */
    public class AriTest02 {
    	public static void main(String[] args) {
    		AriTest02 ari = new AriTest02();
    		System.out.println(ari.f(10));
    	}
    	public int f(int sum){
    		if(sum == 0){
    			return 1;
    		}
    		if(sum == 1){
    			return 4;
    		}
    		return f(sum-2) + 2*f(sum-1);
    		
    	}
    }
    

    练习3:f(n+2)=2*f(n+1) + f(n)

    package com.atguigu.exer;
    
    /*
     * 已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n),
    其中n是大于0的整数,求f(10)的值
     */
    public class AriTest03 {
    	public static void main(String[] args) {
    		AriTest03 ari = new AriTest03();
    		System.out.println(ari.f(10));
    	}
    
    	public int f(int n){
    		if(n == 20){
    			return 1;
    		}else if(n == 21){
    			return 4;
    		}else if(n < 20){
    			return f(n+2) - 2*f(n+1);
    		}else{
    			return 2*f(n-1)+f(n-2);
    		}
    		
    	}
    }
    

    练习4:斐波那契数列

    package com.atguigu.exer;
    /*
     * 输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值
    1 1 2 3 5 8 13 21 34 55
    规律:一个数等于前两个数之和
    要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来
    
     */
    public class AriTest04 {
    	public static void main(String[] args) {
    		AriTest04 ari = new AriTest04();
    		System.out.println(ari.fib(10));
    	}
    	public int fib(int i){
    		if(i == 1){
    			return 1;
    		}else if(i == 2){
    			return 1;
    		}
    		return fib(i-1) + fib(i-2);
    	}
    }
    

    练习5:汉诺塔问题

    
    

    练习6:快排

    
    

    image-20210125203544357

    image-20210125203822596

    计算递归次数:n = (n-1) + (n-2) + 1

  • 相关阅读:
    V2热帖:要多健壮的代码才能支撑起千变万化的需求?
    jmeter生成html报告的命令
    jmeter5.x&4.x搭配使用Serveragent 监听服务端性能参数
    springboot关于tomcat的几个默认配置
    nginx日志统计分析-shell
    OpenStack虚拟机VIP配置步骤
    openstack 3.14.3 虚拟机增加指定IP网卡
    OpenStack各组件的常用命令
    Filebeat的Registry文件解读
    一个shell脚本的实践
  • 原文地址:https://www.cnblogs.com/Notesdata/p/14403175.html
Copyright © 2020-2023  润新知