2022 学习Java项目课程笔记

项目一、踏上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] 90score100,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] 80score<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] 70score<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] 60score<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] 0score<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.t03Task03_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("温馨提示:构不成三角形!");
        }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值