锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

2022年JAVA项目课程学习笔记

时间:2023-05-08 00:37:01 hva扩散硅压力变送器

项目一

任务一、安装配置JDK并开发第一个JAVA程序

1.1.1 安装JDK

  • 安装JDK
    在这里插入图片描述

1.1.2 配置JDK

1.1.3 开发JAVA程序

一、编写源程序 编译成字节码 三、解释执行类 

任务2,搭建JAVA综合开发环境IntelliJ IDEA

1.2.1 安装InteliJ IDEA

1.2.2 配置InteliJ IDEA

1.23 创建项目,包,类

  • 项目:JAVA课程案例
  • 包:net.ouyangyi.p01.t02
  • 类:HelloWorld
  • 不接收命令行参数
  • 操作程序,检查结果
  • 接收多个命令行参数(字符串数组)args,用for循环遍历)
  • 修改程序,检查结果

项目二,打好JAVA编程基础

眼看百遍代码不如手敲一遍。~ 培养编程技能,注重日积月累~ 

任务1,计算圆的面积

  • 输入圆半径,计算圆面积,输出结果

(一)实现编程

版本1,程序员指定半径计算圆的面积

  • 缺点是跟用户之间没有互动

版本2,用户输入半径,程序计算圆面积

  • 用户可以输入半径或实数

  • 输入整数,使用sc.netInt()

版本3,设定结果的精度,满足用户的要求

  • 要求结果保留两位小数

  • 回想你在这里Python如何实现这个用户要求,使用它round()函数可以完成

  • 采用遮尾法,数据没有变化,只显示两位小数

版本4

  • 采用剪尾法处理

任务2,闰年判断

  • 什么是闰年?有两种情况:可以4整除,但不能100整除;可以400整除
  • 解决闰年判断问题涉及算术操作、关系三种操作- 计算,逻辑操作
  • 第一种闰年情况:year % 4 == 0 && year % 100 != 0
  • 第二种闰年情况:year % 400 == 0

(一)实现编程

  • 在net.ouyangyi.po2.t02包里面创建Task01类

  • 操作程序,检查结果

  • 闰年条件涉及逻辑和&&和逻辑或||,但没有逻辑非!,请你修改闰年条件,能够将三种逻辑运算符都派上用场。(在Python里:not、and、or)

(三)拓展练习

任务一,计算圆的面积(选择结构版)

  • 利用选择结构防范用户输入负的半径
  • 查看程序 运行结果

项目三,探索面向对象编程

(一)编程实现

方法一,采用并列式多分支结构评定成绩等级

  • 思路:有多少种情况,就并列写多少个单分支

  • 第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.ouyangyi.p02.t03创建Task03_1

  • 怎么解决这个问题呢?很简单,在处理部分之前将level初始化为空字符串

  • 运行程序,查看结果






  • 总结:并列式多分支结构,优点是易于理解,但缺点是效率低(思考一下,为什么效率低)
  • 其实,这个程序可以做点优化,因为成绩大于100分或小于0 分都是超出范围,所以可以将这两个并列的分支合二为一。

方法二、采用嵌套式多分支结构评定成绩等级

思路1:从高分到低分来划分各个分数段

  • net,ouyangyi.p02.t03包里面创建Task03_2

  • 运行程序,查看结果(测试七种情况)





方法三、采用延拓式多分支结构评定成绩等级

  • ·net.ouyangyi.po2.t03·包里创建Task02_3

  • 运行程序,查看结果(测试七种情况)




  • 总分:延拓式多分支结构,优点是只有一层,并且效率高。希望同学们务必掌握这一种多分支处理方式。

方法四、采用开关式多分支结构评定成绩等级

  • 关键点在于将成绩变量取整之后再整除10,以便将各个分数段转换成离散的整数值,这样才能用开关式多分支结构来进行处理。
  • net.ouyangyi.p02.t03包里面创建Task03_4

  • 运行程序,查看结果(测试七种情况)






  • 总结:开关式多分支结构,优点是书面简洁,并且效率高,但缺点是只能针对离散型的情况进行处理。
  • 开关式多分支结构里的测试表达式,类型可以是整数、字符、甚至可以是字符串。

(二)讲解知识点

  • 多分支结构可有四种处理方式:并列式、嵌套式、延拓式、开关式

1、并列式多分支结构

if (条件1) { 
        
    语句组1
}
if (条件2) { 
        
    语句组2
}
……
if (条件n) { 
        
    语句组n
}

2、嵌套式多分支结构

 if (条件) { 
        
    if (条件1) { 
        
       语句组1
    } else { 
        
       ……
    }
} else { 
        
    if (条件2) { 
        
       语句组2
    } else { 
        
       ……
    }
}

3、延拓式多分支结构

if (条件1) { 
        
    语句组1
} else if (条件2) { 
        
    语句组2
} 
……
} else if (条件n) { 
        
    语句组n
} else { 
        
    语句组n+1
}

4、开关式多分支结构

switch (测试表达式) { 
        
    case1:
        语句组1
        break;
    case2:
        语句组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、构建可进不可退的多级菜单系统

  • 采用开关式多分支结构来实现菜单系统
  • net.ouyangyi.p02.t03包里面创建XExercise02
  • 先完成一级菜单
  • 运行程序,查看结果


  • 采用模块化思想,创建一个登陆方法-login(),然后再用户选择1菜单项时调用它
  • 编写login()方法

  • 运行程序,测试登陆方法

  • 登陆成功之后,定义名片管理方法-cardManagmen()
  • 编写cardManagement()方法代码
  • 运行程序,测试名片管理方法
  • 现在这个菜单系统是可进但是不可退,有一个入口,但有多个入口,等我们学了循环结构之后,我们可以改进这个菜单系统,使之成为可进可退的多级菜单系统,保证系统只有唯一的入口和唯一的出口

任务4,等差数列求和

  • 任务:计算1+2+3+······+100的值

(一)编程实现

  • 创建new.ouyangyi.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次,效率高一些。

(二)讲解知识点

1、for循环

(1)语法格式

for(初始化表达式; 循环条件; 操作表达式){
执行语句

break | continue

}

(2)执行流程

  • 当循环条件成立时,执行循环,直到循环条件不成立时,终止循环。

2、自增自减运算

(1)自增运算

  • 后自增:先用后增
  • 签字增:先增后用

(2)自减运算

  • 后自减:先用后减
  • 前自减:先减后用

(三)拓展练习

任务1、打印水仙花数

  • 所谓水仙花数,是指等于其各位数字立方和的三位数
  • 运行代码,查看结果

任务5、打印乘法九九表

(一)编程实现

  • net,ouyangyi,t05包里创建Task05

  • 运行程序,查看结果

任务6、猜数小游戏

  • 游戏规则:程序产生一个[1, 100]之间的随机整数,用户输入整数进行猜测,如果猜对了,就结束游戏;如果猜错了,程序会提示你是猜高了还是猜低了,然后让你继续输入整数进行猜测

(一)编程实现

  • net.ouyangyi.p02.t06包里创建Task06

  • 运行程序,查看结果

(二)拓展练习

任务1、构建可进可退的多级菜单系统

  • net.ouyangyi.p02.t06包里创建XExercise02

  • 给一级菜单添加循环

  • 运行程序,测试结果

  • 编写登录方法 -login()

  • 运行程序,测试结果

  • 编写名片管理方法 - cardManagement()

  • 运行程序,查看结果

  • 查看完整源代码

任务7、统计一组学生成绩

  • 统计一组学生成绩的总分、平均分、最高分和最低分
  • 假如一组学生100个人,利用前面所学的知识,程序就需要声明10个变量s c o r e 1 , s c o r e 2 , . . . , s c o r e 100 \mathrm{score1, score2, …, - score100}score1,score2,…,score100,来分别记住每位学生的成绩,计算平均分

(一)编程实现

  • net.ouyangyi.p02.t07 包里面创建Task07
  • 运行程序,查看结果
  • 可以利用增强for循环来遍历数组

任务8、打印杨辉三角形

  • 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书出现。在欧洲,帕斯卡(1623 ~ 1662)在1654年发现这一规律。所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

  • 二项式定理,又称为牛顿二项式定理,有艾萨克牛顿与1664-1665年提出。

(一)编程实现

  • 思路:用二维数组来保存杨辉三角形的元素

  • 边界:

  • 内部:

  • net.ouyangyi.p02.t08包里创建Task08

  • 运行程序,查看结果

  • 杨辉三角形的数据没有问题,但是格式不好看,需要处理一下,使之显示为三角形。

  • 在运行程序,查看结果

  • 将杨辉三角形显示为等腰三角形

  • 利用循环耗时来实现打字机效果

  • 这种实现动画效果的不好,浪费支援,应该使用多线程来实现动画效果。

项目三、探索面向对象编程

  • 面向对象程序设计(object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化

任务1、采用面向对象方式求三角形面积

  • 采用面向过程的思路:定义一个计算三角形面积的函数calcuateTriangleArea(double a, double b, double c),输入a、b、c,把输入的a、b、c作为参数传入calcuateTriangleArea()函数,得到计算结果。
  • 采用面向对象的思路:创建Triangle类,包含a、b、c私有属性,提供无参与有参构造方法,提供getters和setters,重写toString()方法,提供getArea()方法
  • 创建TestTriangle类,创建Triangle对象,设置对象属性a、b、c,调用对象方法,计算出三角形面积

(一)编程的实现

  • 创建net.ouyangyi.p03.t01包,然后再包里面创建Triangle
  • 定义三个缺省权限的双精度属性a、b、c,定义计算三角形面积的方法getArea(),返回值是双精度
    (1)利用三边关系定理判断能否构成三角形
  • 三边关系定理:任意两边之和大于第三边
    (2)如果能构成三角形,利用海伦公式来计算
  • 三边为 a , b , c a,b,c a,b,c,半周长 p = a + b + c 2 p=\displaystyle \frac{a+b+c}{2} p=2a+b+c
  • 面积 a r e a = p ( p − a ) ( p − b ) ( p − c ) area=\displaystyle \sqrt{p(p-a)(p-b)(p-c)} area=p(pa)(pb)(pc)
public class Triangle { 
        
    // 缺省权限属性
    double a, b, c;

    /** * @return 三角形面积 */

    public double getArea() { 
        
        double s = 0, p;
        //判断a、b、c能否构成三角形
        if (a + b > c && b + c > a && c + a > b) { 
        
            p = (a + b +c) / 2;
            s = Math.sqrt(p * (p - a) * (p - b) * (p - c));
        } else { 
        
            s = -1;
        }

        return s;
    }
}
  • 类Triangle封装了数据(a、b、c)和操作(getArea()),封装(Encapsulation)是面向对象三大特性之一。

  • 创建一个测试类TestTriangle类,在其主方法里,创建Triangle对象,设置其属性,调用其方法,计算得到三角形面积

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.print("a = ");
        a = sc.nextDouble();
        System.out.print("b = ");
        b = sc.nextDouble();
        System.out.print("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("提示:构不成三角形!");
        }
    }
}
  • 运行程序,查看结果

  • 缺省权限属性的不足:由于a、b、c是缺省权限属性,可以通过对象.属性名直接访问,比如triangle.a = -10;,边长不能为负,这样直接访问属性显然不合理,因此,我们应该将属性私有化,外界不能直接访问,而必须通过公共方法来设置和获取属性,于是私有属性得到有效的保护。

  • 如何实现类的封装:在定义一个类时,将类中的属性私有化,即使用private关键字来修饰,私有属性只能在它所在类中被访问,如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的getXXX()方法(简称getter)和设置属性值的setXXX()方法(简称setter)。

  • 修改Triangle类,将a、b、c属性设置为私有属性

  • 为了让triangle对象能设置私有属性a、b、c,我们就要提供setXXX()方法(setter方法)

  • 此时,triangle对象可以设置私有属性a、b、c,但是无法获取私有属性值,我们还需定义getXXX()方法 - getter方法

  • 修改TestTriangle类,通过setter方法来设置对象属性

  • 运行程序,查看结果

  • 演示对象调用getXXX()方法

  • 在TestTriangle类主方法里打印三角形对象,会不会显示三角形的数据信息呢?

  • 显示的是对象的路径.类名@地址,其实地址就是对象的哈希码。

  • 如何才能打印对象时显示对象的数据信息呢,我们需要去重写(Override)Trigle类的toString()方法,类似于__str__()方法的功能。

  • 采用IDEA自动生成toString()方法

  • 再次运行TestTriangle,看看直接打印对象的效果

  • 其实,打印对象时,默认就会调用对象的toString()方法

  • 下面我们来给三角形类定义一个有参构造方法

  • 此时,切换到TestTriangle类,会发现创建对象出错

  • 为什么会报错呢?当我们创建了有参构造方法时,系统就不会自动添加无参构造方法,除非手动添加无参构造方法

  • 把蓝色光条一道类名上,表明不初始化任何成员变量

  • 我们给构造方法写点代码

  • 此时,你再去看看TestTriangle类,你会发现错误消失了

  • 运行TestTrigle类,查看结果

  • 创建TestTriangle2类来测试有参构造方法

package net.ouyangyi.p03.t01;

import java.util.Scanner;

/** * 功能: * 作者:欧阳怡 * 日期:2022年04月28日 */
public class TestTriangle2 { 
        
    public static void main(String[] args) { 
        
        double a, b, c, s;
        Scanner sc = new Scanner(System.in);

        Triangle triangle = new Triangle();

        System.out.print("a = ");
        a = sc.nextDouble();
        System.out.print("b = ");
        b = sc.nextDouble();
        System.out.print("c = ");
        c = sc.nextDouble();

        //基于有参构造方法来创建三角形对象
        Triangle_1 triangle_1 = new Triangle_1(a, b, c);

        //调用三角形对象方法
        s = triangle_1.getArea();

        //打印三角形对象
        System.out.println(triangle_1);

        //判断是否构成三角形
        if (s != -1) { 
        
            System.out.println("area = " + s);
        } else { 
        
            System.out.println("提示:构不成三角形!");
        }
    }
}
  • 运行程序,查看结果

(二)讲解知识点

  • 本案例的Triangle类提供了无参构造方法与有参构造方法,这就是构造方法的重载(Overloading),当然普通方法也是允许重载的。比如Student类的learn()方法与learn(String subject)方法就是重载的普通方法。

任务2、创建笔记本电脑类(继承一个类,实现多个接口)

  • 创建NetCard接口和USB接口,创建Computer抽象类,然后继承Computer类,实现NetCard接口和USB接口,创建笔记本电脑类Laptop。
  • Java简化了C++的多重继承,是单根继承,只能继承一个类,但是作为补偿,Java允许实现多个接口,让一个类可以实现更多的特性。
  • 在Java里,继承一个类,实现多个接口,就好比是只有一个父亲,可以有多个叔叔。

(一)编程实现

1、创建NetCard接口

  • net.ouyangyi.p03.t02包里创建NetCard接口

2、创建USB接口

  • ouyangyi.p03.t02包里创建USB接口

3、创建Computer抽象类

  • 在ouyanyi.p03.t02包里创建Conputer抽象类
package net.ouyangyi.p03.t02;

/** * 功能:计算机抽象类 * 作者:欧阳怡 * 日期:2022年05月05日 */
public abstract class Computer { 
        
    public abstract void computer();  // 抽象方法,必须要有abstract关键字
    public abstract void computer元器件数据手册IC替代型号,打造电子元器件IC百科大全!
          

相关文章