面向对象-方法
课堂内容:
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>返回数据给函数的调用者。 2>函数一旦执行到了return关键字,那么该函数马上结束。
3.在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。