2022年java程序设计(计算圆面积 闰年判断 成绩等级评定 构建系统)

项目一踏上Java开发之旅

任务一,安装配置JDK并开发第一个Java程序

安装JDK

安装JDK11

在这里插入图片描述

1.12 配置JDK

在这里插入图片描述

1.1.3开发java

1.编写源程序
2.编译成字节码
3.解释执行类

任务二 搭建Java 集成开发环境InterlliJIDEA

1.2.1 安装Interlli IDEA

在这里插入图片描述

1.2.2 配置 InterlliJ IDEA

在这里插入图片描述

• 1.2.3 创建项目. 包. 类

• 项目: Java课程案列
• 包: net.huawei.p01.to2
• 类: HelloWorld

在这里插入图片描述
• 不接受命令行参数
在这里插入图片描述
• 运行程序,查看结果
在这里插入图片描述
• 接收多个命令行参数(字符串数组args,用for循环遍历)
在这里插入图片描述
• 修改程序,在运行,查看结果

在这里插入图片描述

项目二.打好Java编程基础

• 眼观百遍代码,不如手敲一遍
• 修炼编程功力,重在日积月累

任务一.计算圆的面积

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

(一)编程实现

版本1.程序员指定半径,计算圆面积
• 缺点是跟用户之间没有互动

…mermaid
在这里插入图片描述

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

· 用户可以输入整数, 也可输入实数
在这里插入图片描述
`输入整数,用sc.nextInt

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

要求结果保留两位小数
回想一下·=你们在Python里是怎么实现这个用户要求的,利用round()函数可以搞定
采用遮尾法,数据没变,只是现实两位小数
在这里插入图片描述
采用减尾法来处理
在这里插入图片描述
问题:如何接收键盘输入的包含空格的字符串?
输入字符串,用
sc.next()
,如果字符串里有空格,空格之后对字符不接收

在这里插入图片描述

如何才能接受包含空格的字符串呢? 那就要用到Java的缓冲字符输入流(BufferedResder)
在这里插入图片描述

如何进行异常处理,可以自己写, 也可以利用菜单生成处理框架

(三)扩展练习

1.有卡号计算幸运值

·员工卡号是四位整数[1000,9999],各位数字的和就是参加抽奖活动的幸运数字,biru4512,4+5+1+2=12,幸运数字就是12
·输入员工卡号,编程计算该员工的幸运数字
·方法一:直接拆分整数
在这里插入图片描述

·方法二:直接换成字符串来处理
·计算机科学家wirth在上个世纪70年代提出一个经典公式:程序=数据结构+算法,数据结构就是程序的基础,算法是程序的灵魂

求一元二次方程

任务2.闰年判断

· 什么是闰年?有两种情况:能被四整除但不能被100整除;能被400整除
·解决闰年判断问题,涉及三种运算:算术运算,关系运算,逻辑运算
·第一种闰年情况:year %40 && year % 100 !=0==
·第二种闰年情况year % 4000==

(一)编程实现

·在net. lixin.p02.t02包里创建Task02==类
在这里插入图片描述

在这里插入图片描述

·运行程序,查看结果
在这里插入图片描述
在这里插入图片描述
·闰年条件涉及两种运算符,逻辑==&&和逻辑或||,但是没有用逻辑非!==,请你修改闰年条件,能够将三种逻辑运算符都派上用场。(在Python里 :not and or)
在这里插入图片描述

(二)讲解知识点

在这里插入图片描述

·演示求余运算
在这里插入图片描述

·演示关系运算
在这里插入图片描述
演示逻辑运算
在这里插入图片描述
双分支结构,分支只有一条语句时,可以省掉花括号
在这里插入图片描述

(三)扩展练习

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

利用选择结构防范用户输入负的半径
在这里插入图片描述
单支结构一般用于把关或过滤。当然,大家可以用双分支结构来处理这个问题
在这里插入图片描述
要求每行只输入五个数,那么就需要一个计数变量‘count’
在这里插入图片描述

任务2. 求解一元二次方程

-∆>=0,输入两个数实数解。否则提示用户”此方程没有实根!”
-提示:计算平方根math.sqrt(bb-4a*c)

任务3.成绩等级评定

对百分制成绩进行评定
1(100,infty):超出范围
2.[90,100]:优秀·
3.[80,90]:良好
4.[70,80]:中等
5.[60,70]:及格
6.[0,60]:不及格
7.(0,infty):超出范围

(一)编程实现

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

· 思路:有多少种情况,就并列写多少个单分支,分支之间相互独立
在这里插入图片描述

-第一个分数段:$ score>100,score \in(100,+infty)$ 超出范围
-第二个分数段:$ 90 \ le score\le 100,score \in[90,100] $优秀
第三个分数段: $80 \ le score\lt 90,score \in[80,90] $良好
-第四个分数段:$70 \ le score\lt 80,score \in[70,80] $中等
-第五个分数段:$60 \ le score\lt 70,score \in[60,70] $及格
第六个分数段: 0   l e s c o r e < 60 , s c o r e ∈ [ 0 , 60 ] 0 \ le score\lt 60,score \in[0,60] 0 lescore<60,score[0,60]不及格
-第七个分数段: $score\lt 0,score \in[-infty,0] $超出范围

-在’‘‘net.lixin.po1.t02’’'创建Task03_1
在这里插入图片描述
在这里插入图片描述

怎么解决这个问题呢?很简单 在处理部分之前将level的始化为空字符串
在这里插入图片描述

运行程序查看结果,(测试七种情况)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述
-在net.lixin.p02.src包里创建Task03_2
在这里插入图片描述

import java.util.Scanner;

/**

  • 功能
  • 作者:李信
  • 日期:2022年03月31日
    */
    public class Task03_2 {
    public static void main(String[] args) {
    //声明部分
    int score;
    String level;
    Scanner sc = new Scanner(System.in);
    //输入部分
    System.out.println(“score”);
    score = sc.nextInt();
    //处理部分
    level = “”;
    if (score > 100) {
    level = “超出范围”;
    } else {
    if (score >= 90) {
    level = “优秀”;
    } else {
    if (score >= 80) {
    level = “良好”;
    } else {
    if (score >= 70) {
    level = “中等”;
    } else {
    if (score >= 60) {
    level = “及格”;
    } else {
    if (score >= 0) {
    level = “不及格”;
    } else {
    level = “超出范围”;
    }
    }
    }
    }
    }
    }
    //输出部分
    System.out.println(level);
    }
    }

-运行程序,查看结果(测试七种情况)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路二.从高到低来划分各个分数段
-在net.lixin.p02.src包里创建==Task03_2_==类
在这里插入图片描述
-运行程序,查看结果(测试七种情况)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-总结:采用嵌套是多分支结构,优点是层次分明,效率高,但缺点是嵌套式层次太多时显得很繁。

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

-思路一:从高到低分来划分各个分数段
-在net.lixin.p02.src包里创建task03_3
在这里插入图片描述
在这里插入图片描述

-运行程序,查看结果(测试七种情况)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-思路二:从第分到高分来划分分数段
-在net.lixin.src包里创建==Task03_3_==类

在这里插入图片描述
在这里插入图片描述
-运用程序,查看结果(测试七种情况)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-总结:延拓式多分支结构:优点是只有一层,并且效率高。一定要掌握这种多分支结构

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

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

在这里插入图片描述

在这里插入图片描述
-运用程序,查看结果。(测试七种情况)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-总结:开关式多分支结构,优点是书写简洁,并且效率高,但缺点是只针对离散性的情况进行处理。开关式多分支结构里的测试表达式,类型可以是整数字符甚至可以是字符串

(二)讲解知识点

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

(三)扩展练习

-要求输入年 月 日,最好能判断用户输入的是否是合法日期‘
-比如2022年3月31日,那是今年的第九十天(31+28+31=90)
-比如2022年3月31日,那是今年的第九十一天(31+29+31=91)

任务2.构建可进不可退的多级从菜单名单系统

名片管理系统

                    1.登录 (1)添加名片
                               (2)修改名片
                               (3)查询名片
                               (4)删除名片
                     2.退出

-采用开关式多分支结构来实现菜单系统
-在net.lixin.src包里创建XExercise02
在这里插入图片描述
-先完成一级菜单
在这里插入图片描述
-运行程序,查看结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-采用模块化思想,创建一个登录方法login(),然后再用户选择1菜单时调用它
在这里插入图片描述
-编写==login()==方法
在这里插入图片描述

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

任务3.根据收入计算个人所得税

-个人所得税税率表一(综合所得适用)
在这里插入图片描述

#任务4.等差数列求和

-任务:计算1+2+3+…+100的值

(一)编程实现

-创建net.lixin.src包,然后在包里创建Task04
在这里插入图片描述

在这里插入图片描述
-i++:后自增,先用后增
-运用程序,查看结果
在这里插入图片描述
-其实1+2+3+…+100跟100+99+…+3+2+1是等值的,因此for循环可以从100递减循环到1来计算
在这里插入图片描述
-大家不妨编程计算一下1+3+5+…+99
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
-第一种和第二种方法都循环了100次,但是第三种方法只循环了50次,效率更高些

(二)讲解知识点

(1)执行流程
在这里插入图片描述
-当循环条件成立时,执行循环,直到循环条件不成立时,终止循环
2.自增自减运算

(1)自增运算
-后自增:先用后增
-先自增:先增后用
(2)自减运算
-后自减:先用后减
-前自减:先减后用

(三)扩展练习

任务1.打印水仙花数

-所谓水仙花数,是指等于其个位数字立方和的三位数、
在这里插入图片描述
-分析问题首先水仙花是三位数,那么我们可以确定范围:[100,999],这个我们可以通过循环结构来搞定:

for(int n = 100; n<=999; n==)
...
}

-然后对这个范围的每个数n,我们都要去判断它是否等于其各位数字立方和,这里的难点或关键在于如何分解一个三位数,得到她的每位数字
-假设我们已经把三位数n分解成百位数p3,十位数p2,个位数p1,这样我们的筛选条件就可以写出来n==p3p3p3+p2p2p2+p1p1p1.
-如何拆分一个三位数你(375)呢?
-首先求n的个位数:n%10=375%10=5
然后要将三位数变成两位数:n=n/10=375/10=37
对于新的两位数,有求它的个位数:n%10=37/10=7
然后要将两位数变成有一位数:n=n/10=37/10=3
我们可以交替使用求余和整出运算将一个三位数拆分,得到它的个位数 十位数 百位数
当然这个分解方法可以推广到任何多为拆分
在这里插入图片描述

任务5.打印九九乘法表

net,licin.src=-包里创建Task05==类
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值