目录
输出 1 1/2 2/3 3/5 5/8 8/13 13/21
1.方法的基本概念及结构
方法是语句的集合,即共同去完成一个功能的集合。
- 修饰符:可选,决定方法的访问类型。
- 返回值类型:若为void,则不需要返回值(return);否则,需要返回值,且与方法定义的书记类型要相同。
- 方法名:方法的名称,与参数共同构成方法签名。
- 参数列表:指参数的数据类型、顺序及参数个数,当方法被调用时,实参值传递给形参。
- 方法体:定义该方法的功能。
2.使用方法的目的
(1)实现代码的复用。
(2)使代码结构变得清晰、简单。
(3)提高开发的效率。
3.方法的实例
要求:循环输入学生成绩,如果学生成绩在90~100为 A, 80~89为B, 60~79为C,60分以下为不及格。
编码实现如下功能:
- 统计学生的总成绩
- 统计学生的平均成绩
- 统计成绩为A,B,C,和不及格人数
- 计算A,B,C,不及格人数占总考试人数的比例。
public class MethodTest03 {
static Scanner sc = new Scanner(System.in);
static int p = 0;//总人数
static double sum = 0;// 总成绩
static int Aleval = 0;//等级A的人数
static int Bleval = 0;//等级B的人数
static int Cleval = 0;//等级C的人数
static int NoPassleval = 0;//不及格的人数
static double average = 0; //平均成绩
public static void main(String[] args) {
run();
}
/**
* @param tips 提示输入语句
* @return int score成绩
*/
public static int print(String tips) {
System.out.print(tips);
int score = Integer.parseInt(sc.nextLine());
return score;
}
public static String getString(String tips) {
System.out.print(tips);
String s = sc.nextLine();
return s;
}
/**
* 学生成绩统计方法
* @param score
*/
public static void statistic() {
int n = print("请输入第"+(p+1)+"个学生的成绩:");
delay(6);
System.out.println("数据存储中...");
switch(n/10) {
case 10:
case 9:
Aleval++;
break;
case 8:
Bleval++;
break;
case 7:
case 6:
Cleval++;
break;
default:
NoPassleval++;
break;
}
p++;
sum += n;
}
/**
* 延时函数
* @param n 输出.的次数
*/
public static void delay(int n) {
for (int i = 0; i < n; i++) {
System.out.print(".");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println();
}
/**
* 平均分
* @return
*/
public static double Average() {
return average = 1.0*sum/p;
}
/**
* 统计各等级的人数
*/
public static void num() {
System.out.println("等级A所占人数:"+Aleval);
System.out.println("等级B所占人数:"+Bleval);
System.out.println("等级C所占人数:"+Cleval);
System.out.println("不及格所占人数:"+NoPassleval);
}
/**
* 统计各等级占总人数的比率
*/
public static void ratio() {
System.out.println("等级A所占总人数的比率"+(1.0*Aleval/p));
System.out.println("等级B所占总人数的比率"+(1.0*Bleval/p));
System.out.println("等级C所占总人数的比率"+(1.0*Cleval/p));
System.out.println("不及格所占总人数的比率"+(1.0*NoPassleval/p));
}
public static void run() {
System.out.println("---------------------------------------");
System.out.println("-----------学生成绩统计系统------------");
System.out.println("---------------------------------------");
boolean f = true;
while(f) {
statistic();
String str = getString("是否继续输入学生成绩,Y或N:");
if(str.equals("N")||str.equals("n")) {
f = false;
System.out.println("学生总成绩为:"+sum);
System.out.println("学生平均分为:"+Average());
num();
ratio();
}
}
}
}
运行结果如下图所示:
4.方法重载
(1)条件
- 同一个类中(同class)
- 方法名要相同
- 参数列表不同(参数数据类型或参数个数)
(2)实例
public class MethodTest04 {
public static void main(String[] args) {
//add()会选择和数据类型最贴近的一种进行运算 { Debug as一步步去探索}
System.out.println(add(3,5));
System.out.println(add(1,2,3,4,5,6,7,8,9,10));
System.out.println(add(1.2,3));
}
public static int add(int a,int b) {
return a+b;
}
// public static int add(int a,int b,int c) {
// return a+b+c;
// }
public static double add(double a,double b) {
return a+b;
}
public static int add(double a,int b) {
return (int) a+b;
}
/**
* 不限参数的参数列表
* @param a-数组[int]
* @return
*/
public static int add(int ...a) {
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i];
}
return sum;
}
}
运行结果如下图所示:
5.递归
(1)定义
递归是允许方法调用自身调用的属性。
public class recursion{
public static void main(String[] args){
System.out.println(f(5));
}
public static int f(int n){
if(n==1)
return 1;
return n*f(n-1);
}
}
(2)实例1
-
1~n求和
-
前两项求和等于第三项
-
斐波那契数列
-
十进制转换为二进制
public class MethodTest05 {
public static void main(String[] args) {
System.out.println(sum(100));
System.out.println(sum1(100));
System.out.println(fac(4));
fac1(6);
binary(9);
}
/**
* 1~n的和
* @param n
* @return
*/
public static int sum(int n) {
int s=0;
for (int i = 1; i <= n; i++) {
s += i;
}
return s;
}
/**
* 1~n的和
* @param n
* @return
*/
public static int sum1(int n) {
if(n==1) {
return 1;
}
return n+sum1(n-1);
}
/**
* 斐波那契额数列
* 1 1 2 3 5 8 13 21
* @param n
*/
public static int fac(int n) {
if(n==1 || n==2) {
return 1;
}
return fac(n-1)+fac(n-2);
}
/**
* 前两项之和为第三项的值
* @param n
* @return
*/
public static void fac1(int n) {
int a = 1;
int b = 1;
for (int i = 1; i <= n; i++) {
int x = a+b;
System.out.print(x+"\t");
a=b;
b=x;
}
System.out.println();
}
/**
* 十进制转换为二进制
* @param n
*/
public static void binary(int n) {
if(n<2) {
System.out.println(n);
return ;
}
System.out.println(n%2);
binary(n/2);
}
}
运行结果如下图所示:
(3)实例2
-
判断闰年
-
判断素数
-
判断是否登录成功
-
画等腰三角形
-
三个数排序,找出第二大的数
-
输出 1 1/2 2/3 3/5 5/8 8/13 13/21
-
计算一下5!+4!+3!+2!+1!
public class MathodPractise {
static Scanner sc = new Scanner(System.in);
final static String USERNAME = "aisal";
final static String PASSWORD = "123456";
public static void main(String[] args) {
boolean f = isLeap(print("请输入一个年份:"));
if(f == true){
System.out.println("是闰年");
}else {
System.out.println("不是闰年");
}
boolean flag = login(printS("请输入用户名:"),printS("请输入密码:"));
if(flag == true){
System.out.println("登陆成功!");
}else {
System.out.println("登陆失败,用户名或密码有误..");
}
drawPic01(print("请输入等腰三角形的层数n:"));
findSecond(print("请输入数字a:"),print("请输入数字b:"),print("请输入数字c:"));
isPrimer(print("请输入数字n:"));
boolean f1 = isPrimer1(print("请输入数字n:"));
if(f1 == true){
System.out.print("是素数");
}else {
System.out.print("不是素数");
}
System.out.println();
System.out.println();f(print("请输入数字a:"),print("请输入数字b:"));
System.out.println();
System.out.println("5!+4!+3!+2!+1!="+sum(5));
}
public static int print(String tip) {
System.out.print(tip);
int t = Integer.parseInt(sc.nextLine());
return t;
}
public static String printS(String tip) {
System.out.print(tip);
String s = sc.nextLine();
return s;
}
/**
*判断是否为闰年
*/
public static boolean isLeap(int year) {
if(year%400==0 ||(year%4==0&&year%100!=0)) {
return true;
}
return false;
}
/**
* 判断是否为素数
* @param n
* @return
*/
public static void isPrimer(int n) {
boolean f = true;
while (f) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
f = false;
System.out.print(n + "不是素数");
break;
}
}
if (f == true) {
System.out.print(n + "是素数");
break;
}
}
System.out.println();
}
public static boolean isPrimer1(int n) {
for(int i = 2;i <= Math.sqrt(n);i++) {
if(n%i == 0)
return false;
}
return true;
}
/**
* 判断用户名密码是否正确
* @return
*/
public static boolean login(String username,String password ) {
if(USERNAME.equals(username) && PASSWORD.equals(password)) {
return true;
}
return false;
}
/**
* 画一个等腰三角形
* @param n 高度
*/
public static void drawPic01(int n) {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n-i;j++) {
System.out.print(" ");
}
for(int a=1;a<=2*i-1;a++) {
System.out.print("*");
}
System.out.println();
}
}
/**
* 找出第二大数
* @param a
* @param b
* @param c
*/
public static void findSecond(int a, int b, int c) {
if(a<b){
int t = b;
b = a;
a = t;
}
if(a<c) {
int t = c;
c = a;
a = t;
}
if(b<c) {
int t = c;
c = b;
b = t;
}
System.out.println("第二大的数字为:"+b);
}
/**
* 1 1/2 2/3 3/5 5/8 8/13 13/21 21/34
*/
public static void f(int a , int b) {
if(a>20) {
return ;
}
System.out.print(b+"/"+(a+b)+"\t");
f(b,a+b);
}
/**
* n的阶乘
* @param n
* @return
*/
public static int f(int n) {
if(n == 1) { //终止条件
return 1;
}
return n*f(n-1); //递归公式
}
/**
* 计算一下5!+4!+3!+2!+1!
*/
public static int sum(int n) {
int add = 0;
for(int i=1;i<=n;i++) {
add = f(i)+add;
}
return add;
}
}
总结
本片文章对方法有一定的总结和实例应用,参数列表中的形参和调用时的实参要区别清楚,编写代码时看清题意对0和1要有选择。希望大家在这篇文章中有所收获!