上车Java方法
方法基本点介绍
1. Java方法是语句的集合,组在一起执行一个功能。(封装一段特定功能的代码)
a. 方法是解决一类问题的步骤的有序集合
b. 方法包含于类或对象中
c. 方法在程序中创建,在其他地方被引用
d. 方法定义在类中
e. 方法中不能定义方法
2. 设计原则(方法的本义是功能块,就是实现某个功能的语句块的集合)
a. 原子性:一个方法只完成一个功能(利于后期扩张)
3. 命名规则:小驼峰
4. 格式
a. 访问权限修饰符 修饰符 返回值类型 方法名(形参列表 参数名){
、、、
方法体
、、、
return 返回值;
}
i. 访问权限修饰符:public
ii. 修饰符:static
b. 修饰符:给方法额外增加一种/几种约束
c. 返回值类型:根据方法的返回值的数据类型,当没有返回值的时候为void
d. 方法名:标识符(小驼峰)
e. 形参列表:当方法无法自给自足时,需要外部传入定义的变量
f. 方法体: 具体实现的功能
g. 方法的使用:直接调用、对象调用、类调用
h. 注:实参列表要与形参列表数据类型一致、长度一致、顺序一致。
5. 优点:
a. 减少代码冗余
b. 提高复用性
c. 提高可读性
d. 提高可维护性
e. 方便分工合作
f. 降低代码的 耦合度
6. return的两种用法:
a. 返回数据,只能有一个
b. 结束方法
i. 对比
1) continue:跳过本次循环
2) break:跳出循环
3) return:结束方法
方法重载
1、定义:同一个类中,修饰符一致,返回值一致,方法名相同(形参列表不同)
2、作用:可以在同一类中实现更多的功能,且不违背一个方法实现一个功能的基本原则。
可变长参数
a. 代码
b. 注:如果有精确的传参方法,先走精确的,没有的话,走可变的传参方法
c. 可变和固定长度参数混合时(一定要指定固定参数)
ii. 注意:可变长度参数一定要放在最后的位置,(两个/多个(同型/不同型)可变长度参数,并列放置都不可以)。
iii. String的format也可以实现
递归
1. 递归可以解决具有既定规律的特定问题
2. 何时使用
a. 当需要解决的问题可以分成若个小问题,大小问题的解决方法一致相同
b. 有固定规律,函数中自己调用自己。
3. 如何正确使用递归
a. 设置有效的出口条件,避免无穷递归。
4. 递归阶乘
a. 递进:每一次推进,计算都比上一次简单,直至简单到无需推进,就能获得结果。(也叫:到达出口)。
b. 回归:基于出口的结果,逐层向上回归,依次计算每一层的结果,直至回归到最顶层。
c. 注:1的阶乘为1.
d. 例证
i. 提出问题
ii. 尝试解决问题
iii. 解决问题
e. 注:所有能以递归解决的问题,循环都能解决。当解决复杂问题的时候,递归的实现方式更为简单。
f. 四大法则
1. 基准情形: 必须有某些基准情形,它无需递归即可解出。
2. 不断推进: 对于需要递归求解的情形,每次递归调用都必须使得求解状况朝着基准情形推进。
3. 设计法则: 假设所有的递归调用都能运行。
4. 合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性工作。
g. 函数的总结:
h. 拓展:
斐波那契数列 又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2),即从第三项开始每一项都等于前面两项的和。
综合实例
import java.util.Scanner;
/**
*用户管理模块 +
* 登陆
* 注册
* 修改密码
* 共同数据:账号、密码
* @author xx
* @date
*/
@SuppressWarnings("all")
public class UserManagement {
static String username = "";
static String password = "";
static int num = 1;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("***欢迎来访xx***");
System.out.println("请选择:1、登陆 2、注册 3、修改密码");
System.out.println("请选择编号:");
choose(scanner);
}
}
/**
* 功能选择
* @param scanner
*/
public static void choose(Scanner scanner){
String next = scanner.next();
switch (next){
case "1":
System.out.println("***欢迎登陆***");
login(scanner);
break;
System.out.println("***欢迎注册***");
registered(scanner);
break;
case "3":
System.out.println("***修改密码***");
changePassword(scanner);
break;
}
/**
* 登陆
* @param scanner
*/
public static void login(Scanner scanner){
//限制登陆次数
//提示输入信息
System.out.println("请输入账号:");
String trg1 = scanner.next();
System.out.println("请输入密码:");
String trg2 = scanner.next();
if (trg1.equals(username) && trg2.equals(password)){
System.out.println("登陆成功!");
//进入计算器中
//calculator(scanner);
CalculatorDemo calculatorDemo = new CalculatorDemo();
CalculatorDemo.calculator(scanner);
} else {
System.out.println("账号或密码不一致,登陆失败!");
System.out.println("请选择是否继续:yes or no");
String message = scanner.next();
switch (message){
case "yes":
login(scanner);
break;
/*System.out.println("您还有" + (5 - num) + "次机会!");
num ++;
login(scanner);
if (num == 5){
System.out.println("登陆次数过多,账号被锁定冻结!");
return;
}else if (5 - num == 1){
System.out.println("!!!当前仅剩最后一次登陆机会,如果忘记密码,请输入Forget!!!");
String trg = scanner.next();
while (trg.equals("Forget")){
//这里可以用random
System.out.println("系统将帮您重置密码,请输入验证信息:" + "\n" +"xxxxx:");
String ms = scanner.next();
if (ms.equals("xxxx")){
System.out.println("验证成功!");
System.out.println("请输入密码:");
String str = scanner.next();
System.out.println("请确认密码:");
String str1 = scanner.next();
break;
}else{
System.out.print("信息错误!");
}
return;
}
}else {
return;
}
break;*/
case "no":
System.out.println("感谢浏览,再见!");
return;
}
}
}
/**
* 注册
* @param scanner
*/
public static void registered(Scanner scanner){
//提示输入信息(可以考虑账号以被注册情况)
System.out.println("请输入账号:");
String mes1 = scanner.next();
System.out.println("请输入密码:");
String mes2 = scanner.next();
System.out.println("请确认密码:");
String mes3 = scanner.next();
if (mes2.equals(mes3)){
//将注册信息保存,用以验证登陆。
username = mes1;
password = mes2;
System.out.println("注册成功!");
}else {
System.out.println("密码不一致,注册失败!");
System.out.println("请选择是否继续:yes or no");
String trg = scanner.next();
switch (trg){
case "yes":
registered(scanner);
break;
case "no":
return;
}
}
}
/**
* 修改密码
* @param scanner
*/
public static void changePassword(Scanner scanner){
System.out.println("请输入账号:");
String uname = scanner.next();
System.out.println("请输入密码:");
String upass = scanner.next();
if (uname.equals(username) && upass.equals(password)){
System.out.println("请输入新密码:");
String pass1 = scanner.next();
System.out.println("请确认新密码:");
String pass2 = scanner.next();
if (pass1.equals(pass2)) {
System.out.println("修改成功!");
password = pass1;
}else {
System.out.println("密码不一致,修改失败!");
}
}else {
System.out.println("账号密码不匹配!");
}
}
/**
* 计算器
* @param scanner
*/
/*public static void calculator(Scanner scanner){
System.out.println("请选择计算方式:+ - * /");
String select = scanner.next();
switch (select){
case "+":
System.out.println("请输入加数:");
int i = scanner.nextInt();
System.out.println("请输入被加数:");
int i1 = scanner.nextInt();
System.out.println(i + "+" + i1 + "=" + (i + i1));
break;
case "-":
System.out.println("请输入减数:");
int i2 = scanner.nextInt();
System.out.println("请输入被减数:");
int i3 = scanner.nextInt();
System.out.println(i2 + "-" + i3 + "=" + (i2 + i3));
break;
case "*":
System.out.println("请输入乘数:");
int i4 = scanner.nextInt();
System.out.println("请输入被乘数:");
int i5 = scanner.nextInt();
System.out.println(i4 + "*" + i5 + "=" + (i4 + i5));
break;
case "/":
System.out.println("请输入除数:");
int i6 = scanner.nextInt();
System.out.println("请输入被除数:");
int i7 = scanner.nextInt();
System.out.println(i6 + "/" + i7 + "=" + (i6 + i7));
break;
}
}*/
}
计算器类
package cn.wf.method;
import java.util.Scanner;
/**
*简单的计算器(+、-、*、/)
* @author xx
* @date
*/
@SuppressWarnings("all")
public class CalculatorDemo {
public static void main(String[] args) {
}
public static void calculator(Scanner scanner){
System.out.println("请选择计算方式:+ - * /");
String select = scanner.next();
switch (select){
case "+":
System.out.println("请输入加数:");
int i = scanner.nextInt();
System.out.println("请输入被加数:");
int i1 = scanner.nextInt();
System.out.println(i + "+" + i1 + "=" + (i + i1));
break;
case "-":
System.out.println("请输入减数:");
int i2 = scanner.nextInt();
System.out.println("请输入被减数:");
int i3 = scanner.nextInt();
System.out.println(i2 + "-" + i3 + "=" + (i2 - i3));
break;
case "*":
System.out.println("请输入乘数:");
int i4 = scanner.nextInt();
System.out.println("请输入被乘数:");
int i5 = scanner.nextInt();
System.out.println(i4 + "*" + i5 + "=" + (i4 * i5));
break;
case "/":
System.out.println("请输入除数:");
int i6 = scanner.nextInt();
System.out.println("请输入被除数:");
int i7 = scanner.nextInt();
System.out.println(i6 + "/" + i7 + "=" + (i6 / i7));
break;
}
}
}