项目一、踏上Java开发之旅
任务1、安装配置JDK并开发第一个Java程序
1.1.1安装JDK
-安装JDK11
1.1.2 配置JDK
1.1.3 开发Java程序
1.编写源程序
2.编译成字节码
3.解释执行类
任务2、搭建Java集成开发环境IntelliJ IDEA
1.2.1 安装IntelliJ IDEA
1.2.2 配置IntelliJ IDEA
1.2.3 创建项目、包、类
- 项目:Java课程案例
- 包:net.huawei.p01.t02
- 类:HelloWorld
- 不接收命令行参数
- 接收多个命令行参数(字符串数组args,用for循环遍历)
- 修改程序,再运行,查看结果
项目二、打好Java编程基础
- 眼观百遍代码,不如手敲一遍~
- 修炼编程功力,重在日积月累~
任务1、计算圆面积
- 输入圆半径,计算圆面积,输出结果
(一)编程实现
版本1、程序员指定半径,计算圆面积
- 缺点是跟用户之间没互动
版本2、用户来输入半径,程序来计算圆面积
- 用户可以输入整数,也可以输入实数
- 输入整数,用sc.nextInt()
版本3、设定结果的精度,满足用户的要求
- 要求结果保留两位小数
- 回想一下你们在Python里怎么实现这个用户要求的,利用round()函数可以搞定
- 采用遮尾法,数据没变,只是显示两位小数
- 采用剪尾法来处理
任务2、闰年判断
- 什么是闰年?有两种情况:能被4整除但是不能被100整除;能被400整除的数
- 解决闰年判断问题,涉及三种运算:算术运算、关系运算、逻辑运算
- 第一种闰年情况:year % 4 == 0 && year % 100 ! = 0
- 第二种闰年情况:year % 400 == 0
(一)编程实现
- 在net.huawei.p02.t02包里创建Task02类
- 闰年条件涉及到两种逻辑运算符,逻辑与&&和逻辑或||,但是没有用逻辑非!,请你修改闰年条件,能够将三种逻辑运算符都派上用场。(在Python里:not、and、or)
(二) 讲解知识点
(三)拓展练习
任务1、计算圆面积(选择结构版)
- 利用选择结构防范用户输入负的半径
- 单分支结构一般用于把关或过滤。
- 当然,也可以用双分支结构,看个人喜好。
任务2、求解一元二次方程(选择结构版)
- Δ ≥ 0 ,输出两个实数解,否则提示用户“此方程没有实根!”
项目三、探索面向对象编程
(一)编程实现
方法一、采用并列式多分支结构评定成绩等级
-
思路:有多少种情况,就并列写多少个单分支
-
第1个分数段: s c o r e > 100 , s c o r e ∈ ( 100 , + ∞ ) score > 100,score\in(100,+\infty) score>100,score∈(100,+∞) - 超出范围
-
第2个分数段: 90 ≤ s c o r e ≤ 100 , s c o r e ∈ [ 90 , 100 ] 90 \le score \le 100,score \in [90,100] 90≤score≤100,score∈[90,100] - 优秀
-
第3个分数段: 80 ≤ s c o r e < 90 , s c o r e ∈ [ 80 , 90 ] 80 \le score \lt 90,score \in [80,90] 80≤score<90,score∈[80,90] - 良好
-
第4个分数段: 70 ≤ s c o r e < 80 , s c o r e ∈ [ 70 , 80 ] 70 \le score \lt 80,score \in [70,80] 70≤score<80,score∈[70,80] - 中等
-
第5个分数段: 60 ≤ s c o r e < 70 , s c o r e ∈ [ 60 , 70 ] 60 \le score \lt 70,score \in [60,70] 60≤score<70,score∈[60,70] - 及格
-
第6个分数段: 0 ≤ s c o r e < 60 , s c o r e ∈ [ 0 , 60 ] 0 \le score \lt 60,score \in [0,60] 0≤score<60,score∈[0,60] - 不及格
-
第7个分数段: s c o r e < 0 , s c o r e ∈ ( − ∞ , 0 ) score \lt 0,score \in (-\infty,0) score<0,score∈(−∞,0) - 超出范围
-
在net.nieyourong.p02.t03.Task03_1
-
怎么解决这个问题呢?很简单,在处理部分之前将level初始化为空字符串
-
运行程序,查看结果(测试七种情况)
-
总结:并列式多分支结构,优点是易于理解,但缺点是效率低(思考一下,为什么效率低)。
-
其实,这个程序可以作点优化,因为成绩大于100分或小于0分都是超出范围,所以可以将这两个并列的分之合而为一
方法二、采用嵌套多分支结构评定成绩等级
-
思路:从高分到低分来划分各个分数段
-
在
net.nieyourong.p02.t03
包Task03_2
-
运行程序,查看结果(测试七种情况)
-
总结:嵌套式多分支结构,优点是层次
方法三:采用延拓式多分支结构评定成绩等级
思路1:从高分到低分划分各个分数段
- 在
net.nieyourong.p02.t03
包里创建Task03_3
类
- 运行程序,查看结果
思路2:从高分到低分划分各个分数段
- 在
net.nieyourong.p02.t03
包里创建Task03_3_
类
-
运行程序,查看结果 (测试七种情况)
-
总结:延拓式多分支结构,优点是只有一层,并且效率高。希望大家掌握这一种方式。
方法四、采用开关式多分支结构评定成绩等级
-
关键点在于将成绩变量取整之后再整除10,以便将各个分数段转换成离散的整数值,这样才能用开关式多分支结构来进行处理
-
在
net.nieyourong.p02.t03
包里创建Task03_4_
类
-
运行程序,查看结果
-
总结:开关式多分支结构,优点是书写简洁,并且效率高,但缺点是只能针对离散型的情况进行处理。
-
开关式多分支结构里的测试表达式,类型可以是整数、字符、甚至可以是字符串
(二)讲解知识点
- 多分支结构可有四种处理方式:并列式、嵌套式、延拓式、开关式
1、并列式多分支结构
if (条件1) {
语句组1
}
if (条件2) {
语句组2
}
……
if (条件n) {
语句组n
}
2、并列式多分支结构
if (条件1) {
语句组1
}
if (条件2) {
语句组2
}
……
if (条件n) {
语句组n
}
3、延拓式多分支结构
if (条件1) {
语句组1
} else if (条件2) {
语句组2
}
……
} else if (条件n) {
语句组n
} else {
语句组n+1
}
4、开关式多分支结构
switch (测试表达式) {
case 值1:
语句组1
break;
case 值2:
语句组2
break;
……
case 值n:
语句组n
break;
default:
语句组n+1
}
(三)拓展练习
1、确定给定日期是一年的第几天
- 要求输入年、月、日,最好能判断用户输入的是否是合法日期
- 比如2022年3月31日, 那是今年的第90天(31 + 28 + 31 = 90)
- 比如2000年3月31日,那是2000年的第91天(31 + 29 + 31 = 91)
2、构建可进不可退的多级菜单系统
-名片管理系统包括:1.登录 2.退出
登录:1.添加名片 2.修改名片 3.查询名片 4.删除名片
- 采用开关式多分支结构来实现菜单系统
- 在
net.nieyourong.p02.t03
包里创建XExercise02
类
- 先完成一级菜单
- 运行程序,查看结果
- 采用模块化思想,创建一个登录方法
- login()
,然后再用户选择1菜单项时调用它
- 编写
login()
方法
- 运行程序,测试登录方法
- 登录成功之后,定义名片管理方法-
cardManagment
- 编写
cardManagement()
方法代码
- 运行程序,测试名片管理系统
- 现在这个菜单系统是可进但是不可退,有一个入口,但有多个入口,等我们学了循环结构之后,我们可以改进这个菜单系统,使之成为可进可退的多级菜单系统,保证系统只有唯一的入口和唯一的出口。
任务4、等差数列求和
- 任务:计算1 + 2 + 3 + …… + 100的值
(一)编程实现
-
创建
net.nieyourong.p02.t04
包,然后在包里创建Task04
类
-
i++:后自增,先用后增
-
运行程序,查看结果
- 其实1 + 2 + 3 + …… + 100跟100 + 99 + …… + 3 + 2 + 1是等值的,因此for循环可以从100递减循环到1来计算
-
大家不妨编程计算1 + 3 + 5 + … + 99的值
-
第1种和第2种方法都循环100次,但是第3种方法只循环了50次,效率高一些。
任务5、打印九九乘法表
(一)编程实现
- 在
net.nieyourong.t05
包里创建Task05
类
- 运行程序,查看结果
任务6、猜数小游戏(单次版)
- 游戏规则:程序产生一个[1, 100]之间的随机整数,用户输入整数进行猜测,如果猜对了,就结束游戏;如果猜错了,程序会提示你是猜高了还是猜低了,然后让你继续输入整数进行猜测。
(一)编程实现
在net.nieyourong.p02.t06
包里创建Task06
类
- 运行程序,查看结果
- 在
net.nieyourong.p02.t06
包里创建Task06_
类
- 运行程序,查看结果
(二)拓展练习
任务1、猜数小游戏(多次版)
任务2、构建可进可退的多级菜单系统
- 在
net.nieyourong.p02.t06
包里创建XExercise02
类
- 给一级菜单添加循环
- 运行程序,测试效果
- 编写登录方法 - login()
- 运行程序,测试效果
-
编写名片管理方法 - cardMannagement()
-
运行程序,查看效果
-
查看完整源代码
任务3、模拟微信拼手气红包程序产生指定个数的随机红包
- 输入总金额与红包数,随机给每个红包分配金额
任务7、统计一组学生成绩
- 统计一组学生成绩的总分、平均分、最高分和最低分
(一)编程实现
- 在
net.nieyourong.p02.t07
包里创建Task07
- 运行程序,查看结果
(三)拓展练习
任务1、蓝桥杯竞赛题:回文日期问题
- 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按“yyyymmdd”的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021年 12月2日。也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212即2121 年 12 月 12 日。算不上“千年一遇”,顶多算“千年两遇”。
- 给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
- 输入描述:输入包含一个八位整数 N,表示日期。
对于所有评测用例,10000101 ≤ N ≤ 89991231,保证 N 是一个合法日期的 8 位数 - 输出描述:输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型
的回文日期。
任务2、数组排序(升序和降序排列)
1、选择法排序
(1)选择法排序含义
- 选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
(2)选择法排序实现步骤
- 选择法排序(降序):n nn个数排序,经过n − 1 n-1n−1轮比较。
– 第1 11轮是第1 11个数跟剩下的( n − 1 ) (n-1)(n−1)个数比较,让第1 11个数成为本轮最大者,要比较( n − 1 ) (n-1)(n−1)次;
– 第2 22轮是第2 22个数跟剩下的( n − 2 ) (n-2)(n−2)个数比较,让第2 22个数成为本轮最大者,要比较( n − 2 ) (n-2)(n−2)次;
– ……
– 第( n − 1 ) (n-1)(n−1)轮是第( n − 1 ) (n-1)(n−1)个数与剩下的1 11个数比较,让第( n − 1 ) (n-1)(n−1)个数成为本轮最大者,要比较1 11次。
– 总比较次数:(n−1)(n−2)+…+2+1= n(n−1)/2=O(n *n )
2、冒泡法排序
(1)冒泡法排序含义
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。
(2)冒泡法排序实现步骤
- 冒泡法排序(降序):n nn个数排序,经过n − 1 n-1n−1轮比较。
– 第1 11轮是n nn个数里相邻两个数比较,如果后者比前者大就交换,要比较( n − 1 ) (n-1)(n−1)次,本轮最小者“浮”到第n nn个位置;
– 第2 22轮是前( n − 1 ) (n-1)(n−1)个数里相邻两个数比较,如果后者比前者大就交换,要比较( n − 2 ) (n-2)(n−2)次,本轮最小者“浮”到第( n − 1 ) (n-1)(n−1)个位置;
– ……
– 第( n − 1 ) (n-1)(n−1)轮是前2 22个数里相邻两个数比较,如果后者比前者大就交换,要比较1 11次,本轮最小者“浮”到第2 22个位置;
– 总比较次数:(n−1)+(n−2)+…+2+1= n(n−1)/2
任务8、打印杨辉三角形
- 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623 ~ 1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。
- 二项式定理,又称牛顿二项式定理,由艾萨克牛顿于1664-1665年提出。
(一) 编程实现
- 思路:用二维数组来保存杨辉三角形的元素
KaTeX parse error: Undefined control sequence: \stop at position 62: …1&4 &6 &4 &1\\ \̲s̲t̲o̲p̲{matrix} - 边界:a[i][0]=1,a[i][i]=1,i∈[0,n−1]a[i][0] = 1, a[i][i] =1, i\in[0, n-1]a[i][0]=1,a[i][i]=1,i∈[0,n−1]
- 内部:a[i][j]=a[i−1][j−1]+a[i−1][j],i∈[2,n],j∈[1,i−1]a[i][j]=a[i-1][j-1]+a[i-1]
- 在
net.nieyourong.p02.t08
包里创建Task08
类
- 运行和谐,查看结果
- 将杨辉三角形显示为等腰三角形
- 打字机程序
- 运行程序效果
项目三、探索面向对象编程
任务1、采用面向对象方式求三角形面积
(一)编程实现
- 利用IDEA的工具
public class TestTriangle {
public static void main(String[] args) {
double a, b, c, s;
Scanner sc = new Scanner(System.in);
//利用无参构造方法创建三角形对象
Triangle triangle = new Triangle();
System.out.println("a = ");
a = sc.nextDouble();
System.out.println("b = ");
b = sc.nextDouble();
System.out.println("c = ");
c = sc.nextDouble();
//设置三角形对象属性
triangle.a = a;
triangle.b = b;
triangle.c = c;
//调用三角形对象方法
s = triangle.getArea();
//判断是否构成三角形
if (s == -1) {
System.out.println("area =" + s);
}else {
System.out.println("温馨提示:构不成三角形!");
}