文章目录
复习
今天 5 - 6:30 1024 活动!!!
明天 2 - 6 千峰杯项目大赛,(UI 前端 Java 云计算 大数据)
分支结构
【重点】
业务逻辑条件分析,思路分析
if () {}
if () {} else {}
if () {} else if () {}.... else {}
switch () {
case 常量1:
处理方式1;
break;
case 常量2:
处理方式2;
break;
case 常量3:
处理方式3;
break;
case 常量4:
处理方式4;
break;
default:
未匹配其他处理方式;
break;
}
循环结构:
解决问题
1. 代码冗余!!
2. 代码阅读性极差!!
3. 代码维护性极差!!
常用的循环结构
while () {}
do {} while ()
for (/* 循环条件判断 */;/* 循环条件判断 */;/* 循环条件变更 */) {
// 循环体
}
嵌套循环
方法
1. 为什么要使用方法
循环处理复用代码问题
1. 代码冗余,需要多次复制完整的循环,完成代码功能所需
2. 代码阅读性极差,代码重复性,代码功能的逻辑性,都需要再次分析才可以晓得
3. 代码维护性极差!!!
2. main 方法分析 Java 定义方法的格式和要求
public static void main(String[] args) {
// 方法体
}
/*
public static
【固定格式,不要问】
void
当前方法的返回值类型,void 表示当前方法没有返回值。
例如:
中午去食堂吃饭,你付钱 10 元点油泼面,商家给你端上来一份油泼面。
【油泼面】是返回值
main
方法名,使用/调用方法的名称。方法名要求,见名知意,动宾结合,小驼峰命名法
例如:
getStudentName setStudentName
一个方法!!调用者可以通过方法的名称 + 参数情况,就可以指定当前方法执行目标是什么。
(String[] args)
小括号中参数运行所需的外来数据,方法参数列表
例如:
中午去食堂吃饭,你付钱 10 元点油泼面,商家给你端上来一份油泼面。
【10元】 是参数
{}
大括号中是方法体,方法的执行内容,目标执行的代码内容!!!!
*/
3. 比葫芦画瓢
public static 返回值类型 方法名(形式参数列表) {
方法体
}
public static returnType methodName(parameterTypes) {
method body;
}
4. 无参数无返回值方法
4.1 需求
方法执行,在命令行展示 中午吃油泼面
4.2 方法分析
方法分析:
public static
固定格式,不要问!
返回值类型:
当前方法【封装】的目标是展示中午吃油泼面,方法的功能中没有数据返回,有且只是打印展示!!!!‘
【标准】
如果方法体内容/方法执行目标,最终展示方法执行结果,当前方法没有方法体
Sout 打印展示 != 方法的返回值
当前方法没有返回值,使用 void 表示
方法名:
[要求] 见名知意,动宾结合,小驼峰命名法
方法功能是展示中午吃什么
showLunch 展示午饭!!!
形式参数列表:
当前方法执行所需的内容,不受外来数据约束,当前方法没有参数
() 方法哪怕没有参数,也需要当前小括号。
【注意】Java 中变量和方法的最大区别是小括号
方法声明
public static void showLunch();
4.3 方法声明
public static void showLunch();
4.4 方法实现
/**
* 展示中午吃油泼面
*/
public static void showLunch() {
// 大括号中是方法体
System.out.println("中午吃油泼面");
}
4.5 方法调用
// main 方法是目前阶段代码执行的入口
public static void main(String[] args) {
/*
【调用方法】 方法是只狗,哪里需要哪里吼
喊名字。调用方法需要通过方法名调用。
并且 Java 调用执行方法,需要在方法名之后加 ()
*/
showLunch();
}
4.6 方法执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pa3omffa-1666626036881)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221024113202327.png)]
5. 有参数无返回值方法
5.1 需求
展示用户提供给当前方法的 int 类型数据
方法功能: 展示,所需展示内容是通过该用户在调用方法过程中提供的,【当前方法需要外来数据】
5.2 方法分析
分析:
public static
固定格式,不要问
返回值类型:
当前方法执行目标是展示用户提供的数据,没有数据返回值。
【注意】控制台打印展示 不等于 方法返回值
方法名:
【要求】见名知意,动宾结构,小驼峰命名法
showInData 展示 int 类型数据
形式参数列表:
【重点】
当前方法执行需要外来数据支持,要求用户提供int 类型数据,在方法声明中,需要告知用户当前方法参数类型需求,注意格式:
(int num)
int 是当前参数的数据类型
num 是参数的名称, 并且 num 参数变量, 可以直接在方法体内使用
参数名称推荐带有一定的语义性,提高代码的阅读性
5.3 方法声明
public static void showIntData(int num);
5.4 方法实现
/*
@param 变量名 变量解释,使用概述,注意事项
解释当期那方法所需参数的使用方式,描述方法参数情况
*/
/**
* 该方法在控制台展示用户提供的 int 类型数据
*
* @param num 要求用户提供的 int 类型数据内容
*/
public static void showIntData(int num) {
/*
"用户提供的数据为:"终端直接可见内容
+ 拼接使用的胶水,不是算术运算符,仅用于拼接后面的数据内容。要求 + 左侧必须是字符串
num 是用方法声明对应的参数变量,方法体可以直接使用
*/
System.out.println("用户提供的数据为:" + num);
}
}
5.5 方法调用
public static void main(Strin[] args) {
/*
【注意】
调用一个带有参数的方法,必须按照声明要求,给予符合
数据类型的实际参数内容。
方法声明位置是【形式参数】,调用方法给予的数据内容是【实际参数】
【生活案例】
今天中午吃红烧鱼,列了一个清单:鲤鱼一条【形式参数】,葱姜蒜,料酒,酱油...
清单知识只说明当前做菜所需的原材料有哪些,并不是一定存在的。
外出购买,按照清单内容购买所需材料,买了一条 2.5 斤的鲤鱼!!!【实际参数】
*/
// 10 就是符合当前方法所需数据类型的实际参数
showIntData(10);
/*
showIntData(10.5);
给予方法的实际参数数据类型,必须符合方法声明要求,如果不符合编译报错
*/
/*
showIntData();
没有给予当前方法所需参数,编译报错!!!
*/
/*
showIntData(10, 20, 30);
参数类型和参数个数,必须符合方法声明要求!!不能多,不能少
*/
}
5.6 方法执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLtrt9j7-1666626036883)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221024141508269.png)]
6. 无参数有返回值方法
6.1 需求
完成目标方法:调用目标方法,可以获取一个整数10
6.2 方法分析
分析:
public static
固定格式,不要问
返回值类型:
当前方法返回整数10,相当于当前方法返回值的数据类型为 int ,调用当前方法可以得到一个整数数据。
返回值数据类型为 int
方法名:
【要求】 见名知意,动宾结合,小驼峰命名法
getIntNumber
getIntData
形式参数列表:
当前方法执行,无需任何的外来数据,无参数!!
()
6.3 方法声明
public static int getIntNumber();
6.4 方法实现
/*
@return 解释当前返回值类型,返回值含义和情况概述
*/
/**
* 调用当前方法,可以得到一个 int 类型整数 10
*
* @return 返回值为 int 类型,返回的最终结果过为 10
*/
public static int getIntNumber() {
/*
需要方法对外返回一个结果
关键字:
return 返回,主要有两个作用:
1. 终止方法运行,一旦方法运行到 return 关键字,方法执行结束。
2. 返回 return 关键字之后的数据内容, 返回到方法调用位置。
【注意】
方法声明位置已告知当前方法返回值数据类型为 int 类型
所以要求 return 之后的数据内容必须为 int 类型数据。
*/
return 10 ;
}
6.5 方法调用
public static void main(String[] args) {
int num = 0;
System.out.println("方法调用之前:" + num);
/*
调用 getIntNumber 方法,使用当前的返回值
内容给予 num int 类型变量赋值操作
*/
num = getIntNumber();
System.out.println("方法调用后:" + num);
}
6.6 方法执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzAH1dqK-1666626036887)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221024150532190.png)]
7 有参数有返回值类型
7.1 需求
方法功能描述:用户提供两个 int 类型数据,方法计算返回两个整数之和
7.2 方法分析
分析:
public static
固定格式,不要问
返回值类型:
两个 int 类型数据相加之后的结果有可能超出 int 数据类型对应的数据范围
可以考虑当前方法的返回值为
long
或者说不考虑太多的情况下
int 也是 ok 的
方法名:
见名知意,动宾结合,小驼峰命名法
getSum
形式参数列表:
用户提供两个 int 类型数据,参数类型为 int,int
格式:
(int num1,int num2)
7.3 方法声明
public static long getSum(int num1,int num2);
7.4 方法实现
/**
* 计算两个 int 类型数据之和, 返回计算之和
*
*@param num1 用户提供的 int 类型数据
*@param num2 用户提供的 int 类型数据
*@return 返回两个 int 类型数据之和,考虑到有可能两个
int 类型相加超出 int 类型数据范围,所有
返回类型为 long 类型
*/
public static long getSum(int num1, int num2) {
return num1 + num2;
}
7.5 方法调用
public static void main(String[] args) {
long sum = 0L;
System.out.println("方法调用之前" + sum);
sum = getSum(20 , 30);
System.out.println("方法调用之后" + sum);
}
7.6 方法执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPRJ2pDv-1666626036890)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221024160037014.png)]
8 作业
1. 整理笔记
2. 案例代码 + 注释 三遍
3. 完成作业练习题
/*
要求:
1. 方法功能单一化!!!越单一越好!!!
2. 不允许在方法中使用 Scanner 从键盘上获取数据!!!
3. 所有方法必须调用通过,可以运行
4. 方法体实现,调用通过就OK
5. 完成每一个方法对应的文档注释,注意格式。
*/
//封装一个方法,返回两个整数里的较大那个
public class HomeWork1 {
public static void main(String[] args) {
int max = 0;
max = maxOfNumber(5 , 9);
System.out.println("较大的数字是" + max);
double min = 0;
min = minOfNumber(3.14 , 3.1456);
System.out.println("较小的小数是" + min);
}
/**有参数有返回值
* 封装一个方法,返回两个整数里面比较大的那个
* @param num1 用户提供的整数类型数据 1
* @param num2 用户提供的整数类型数据 2
* @return 经过判断返回值较大的一个
*/
public static int maxOfNumber(int num1,int num2) {
if (num1 > num2) {
return num1;
} else {
return num2;
}
}
//封装一个方法,返回两个浮点数里的较小那个
/**有参数有返回值
*封装一个方法,返回两个浮点数里的较小的那个
*@param num1 用户提供的浮点数类型数据 1
*@param num2 用户提供的浮点数类型数据 2
*@return 经过 if () else {} 分支结构返回值小的一个
*/
public static double minOfNumber(double num1,double num2) {
if (num1 > num2) {
return num2;
} else {
return num1;
}
}
//封装一个方法,来判断一个字符是否是大写字母
//如果是,返回true,否则返回false
public class HomeWork2 {
public static void main(String[] args) {
char ch ;
ch = toMyLower('D');
System.out.println(ch);
boolean ret;
ret = isMyEnglish('5');
System.out.println(ret);
}
/** 有参数有返回值
* 封装一个方法,来判断一个字符是否是英文字母
* 如果是,返回 true,否则返回false!
* @param c 字符类型数据
* @return if () {} else {}分支结构判断返回 true or false
*/
public static boolean isMyEnglish(char c ) {
if (c < 'Z' && c > 'A' || c < 'z' && c > 'a' ) {
return true;
} else {
return false;
}
}
//封装一个方法,来判断一个字符是否是数字字符
//如果是,返回true,否则返回false!
//封装一个方法,来判断一个字符是否是英文字母
//如果是,返回true,否则返回false!
/**有参数有返回值
* 封装一个方法,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
* @param c 字符类型数据
* @return if () {} else {}分支结构判断返回小写字母或者保持不变返回
*
*/
public static char toMyLower(char c) {
if (c >= 'A' && c <= 'Z') {
return c += 32;
} else {
return c;
}
}
//封装一个方法,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
/**有参数有返回值
* 封装一个方法,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
* @param c 字符类型数据
* @return if () {} else {}分支结构判断返回小写字母或者保持不变返回
*
*/
public static char toMyLower(char c) {
if (c >= 'A' && c <= 'Z') {
return c += 32;
} else {
return c;
}
}
//封装一个方法,实现将一个正整数,倒序打印输出! 1234 4321
/** 有参数无返回值
* 封装一个方法,实现将一个正整数,倒序打印输出! 1234 4321
* @param number int 用户提供类型变量
* for 循环 打印出倒序正整数
*/
public static void reverse(int number) {
for (int i = 1 ; number >0 ; number /= 10) {
System.out.print(number % 10);
}
}
//表达式(立方) 编写程序,计算该数的立方
/**有参数有返回值
* 表达式(立方) 编写程序,计算该数的立方
* @param number double 用户提供类型变量
* @return 返回一个 number 的立方
*/
public static double cube(double number) {
return number * number * number;
}
//流程控制(闰年问题) 输入一个年份,判断该年份是平年还是闰年:
//注: 闰年就是第二个月有29天的那一年, 能被4整除但是不能被100整除的是闰年, 或者能被400整除的也是闰年
//如果是返回 true 不是返回false
/** 有参数有返回值
* 流程控制(闰年问题) 输入一个年份,判断该年份是平年还是闰年:
* 注: 闰年就是第二个月有29天的那一年, 能被4整除但是不能被100整除的是闰年, 或者能被400整除的也是闰年
* 如果是返回 true 不是返回false
* @param year int 用户提供的类型数据
* @return if () {} else {} 判断是否闰年返回 true or false
*/
public static boolean isLeap(int year) {
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
return true;
} else {
return false;
}
}
//表达式(正数判断)传入一个数字, 判断这个数是否是正数(是,打印YES,不是输出NO)
/** 有参数无返回值
* 表达式(正数判断)传入一个数字, 判断这个数是否是正数(是,打印YES,不是输出NO)
* @param 用户提供 int 类型数据 if () {} else {} 正数调用方法打印 "Yes" , 不是正数直接打印 "No"
*
*/
int num1 = 56;
if (num1 > 0) {
isPositiveNumber(num1);
} else {
System.out.println("No");
}
public static void isPositiveNumber(int num1) {
System.out.println("Yes");
}
【以下内容自行分析封装方法】
1. 求15的阶乘
// 作业
public class HomeWork4{
public static void main(String[] args) {
long sum;
sum = getFactorial(15);
System.out.println(sum);
}
/** 有参数有返回值
* 求15的阶乘 n * (n - 1)
* @param num long 类型用户提供num数据
* @return for循环出 15! num返回值
*/
public static long getFactorial(long num) {
for (long i = num - 1; i > 0; i--) {
num *= i ;
}
return num;
}
}
2. 用户输入一个数,求对应数的阶乘(考虑数据延展性)
3. 完成30位以内的斐波那契数列
1 1 2 3 5 8 13 21 34 55 89 144 ...
4. 分解质因数
例如:
30 ==> 2 * 3 * 5
90 ==> 2 * 3 * 3 * 5
40 ==> 2 * 2 * 2 * 5
核心:
如果当前目标数据可以被某一个素数整除之后,需要再次确认当前素数是否可以继
续整除目标数据
素数作为循环变量
5.
*****
*****
*****
*****
*****
6.
*
**
***
****
*****
7.
*
***
*****
*******
*********
-
有参数有返回值
-
求15的阶乘 n * (n - 1)
-
@param num long 类型用户提供num数据
-
@return for循环出 15! num返回值
*/
public static long getFactorial(long num) {
for (long i = num - 1; i > 0; i–) {
num *= i ;}
return num;
}
-
}
- 用户输入一个数,求对应数的阶乘(考虑数据延展性)
- 完成30位以内的斐波那契数列
1 1 2 3 5 8 13 21 34 55 89 144 … - 分解质因数
例如:
30 ==> 2 * 3 * 5
90 ==> 2 * 3 * 3 * 5
40 ==> 2 * 2 * 2 * 5
核心:
如果当前目标数据可以被某一个素数整除之后,需要再次确认当前素数是否可以继
续整除目标数据
素数作为循环变量 -
**