面向对象-方法

课堂内容:

1.方法的概念

2.方法的定义

3.方法的分类

4.方法的重载

 

 

一、方法概念

方法的概念:

方法是体现了面向对象中的封装,将多个代码片段封装成一个方法,为了这些代码的重用。

二、方法的定义:

[作用域/可见度/访问修饰符] 返回值 方法的名称(首字符小写) 参数列表 {

方法体

}

三、方法的分类: 非静态方法和静态方法的关系:

1.静态方法能够直接调用静态方法或静态变量 静态---静态 * 2.非静态方法能够直接调用非静态方法或非静态变量 非静态---非静态 * 3.静态方法不能直接调用非静态方法或非静态变量 * 4.非静态方法能够直接调用静态方法或静态变量 非静态--静态


四、方法的重载

同一个类中,方法名字相同,参数列表不同。则是重载注意: 1. 参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同 2. 方法的重载与方法的修饰符和返回值没有任何关系

 

/**
 *  方法的重载:  定义一组相同行为,但具有不同的实现,比喻:计算从家到公司的路程    可以有不同的计算方式,但都是属于同一种行为
 *  方法重载的定义:
 *                  方法名称相同,参数列表中参数的个数和类型不同,返回值也可以不同
 * 
 *  作用域:
 *          public  : 修饰的变量、方法、类可以在任何地方被调用
 *          default : 修饰的变量、方法、类只能在同包下访问
 
      int method(int a) {  
        
    }
    
      int method(char i) {
        return 0;
    }
    
     void method(int i,String s) {
        
    }

作业

 

编程题

1.计算从1到某个数以内所有奇数的和。

2.计算从1到某个数以内所有能被3或者17整除的数的和。

3.计算1到某个数以内能被7或者3整除但不能同时被这两者整除的数的个数。

4.计算1到某个数以内能被7整除但不是偶数的数的个数。

5.从键盘输入一个数n,判断是不是一个质数(质数是只能被1和它自身整除的数)。

中级:编程题

1.求2〜某个数之内的素数。【素数 : 只能被1或本身整除的数】

package lianxi01;

import java.util.Scanner;

/**
 * 打印2-j的所有素数 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数
 * @author nice
 *
 */
public class Prime {
    public static void main(String[] args) {
        System.out.println("请输入要结束的临界值:");
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        panDuan(2, a);
    }

    /**
     * 从i起循环判断是否为素数
     * @param i 表示起始数
     * @param j 表示结束数
     */
    public static void panDuan(int i, int j) {
        if (i<0) {//判断输入的值是否小于0,小于0结束程序
            System.out.println("年份不能小于0");
            return;
        }
        
        for (i = 2; i <= j; i++) {
            if (getPrime(i) == true) {
                System.out.print(i + "\t");
            } else
                continue;
        }
    }

    /**
     * 通过运算判断传入的数值是否为素数
     * @param i 传入待判断的数
     * @return 为素数返回true 否则false
     */
    public static boolean getPrime(int i) {
        int max = i / 2 + 1;
        for (int j = 2; j < max; j++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }
}

2.判断某个年份是否是闰年。 A:能被4整除,并且不能被100整除 (2020) B:或者能被400整除。

package lianxi02;
import java.util.Scanner;
/**
 * 判断某个年份是否为闰年
 * @author nice
 *
 */
public class Year {
    public static void main(String[] args) {    
        System.out.println("请输入要判断的年份");
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        panDuan(a);
    }

    /**
     * 判断方法,判断传入的年份是否为闰年
     * @param i 传入的年份
     */
    private static void panDuan(int i) {
        if (i<0) {//判断输入的值是否小于0,小于0结束程序
            System.out.println("年份不能小于0");
            return;
        }
        
        if (i%4 == 0 && i%100 != 0) {
            System.out.println(+i+"年是闰年");
        }
        else if(i%400==0) {
                System.out.println(+i+"年是闰年");
            }
        else System.out.println(+i+"年不是闰年");        
    }   
}

3.已知有一个数列:f(0) = 1,f(1) = 4,f(n+2) = 2 * f(n+1) + f(n),其中n是大于0的整数,求f(n)的值(提示:使用递归)

package lianxi03;

import java.util.Scanner;

public class Sequence {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.println(jiSuan(a));
    }

    private static int jiSuan(int i) {
        if (i == 0) {
            return 1;
        } else if (i == 1) {
            return 4;
        } else
            return 2*jiSuan(i - 1) + jiSuan(i-2);
    }
}

4.求2+22+222+2222。。。【递归】

package lianxi04;

import java.util.Scanner;

/**
 * 求2+22+222+2222。。。【递归】 
 * @author nice
 *
 */
public class Accumulate {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		System.out.println(sumAll(x));
	}

	/**
	 * 求所有的i累加的和 
	 * @param x
	 * @return
	 */
	private static int sumAll(int x) {
		int sumAll = 0;
		for (int i = 1; i <= x; i++) {
			sumAll += jiSuan(i);
		}
		return sumAll;
	}

	/**
	 * 计算每个i对应的值
	 * @param i
	 * @return
	 */
	private static int jiSuan(int i) {
		int a = (int) Math.pow(10, (i - 1));
		if (i == 1) {
			return 2;
		} else {
			return 2 * a + jiSuan(i - 1);
		}
	}
}

高级编程题

1.求某个三位数以内的水仙花数: 水仙花数:一个数各个位上的立方之和,等于本身 例如: 153 = 1(3) + 5(3)+3(3) = 1+125+27 = 153

package lianxi04;
import java.util.Scanner;

public class Daffodil {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        shuixianhua(number);
    }

    public static void shuixianhua(int n) {
        if (n < 100) {
            return;
        } else {
            if ((n / 100) * (n / 100) * (n / 100) + (n / 10 % 10) * (n / 10 % 10) * (n / 10 % 10)
                    + (n % 10) * (n % 10) * (n % 10) == n) {
                System.out.println(n);
                shuixianhua(n - 1);
            } else {
                shuixianhua(n - 1);
            }
        }
    }
}

 

面试题

1.方法的传参过程是如何工作的

2.return关键字的用法有哪些,举例说明

3.什么是函数的重载?举例说明

1.

  1. 1>返回数据给函数的调用者。 2>函数一旦执行到了return关键字,那么该函数马上结束。

3.在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。