jav基础_week 2 判断

week 2 判断

2.1 比较

以“自动售票机”为例:

  • 自动售票机,选择了终点或者路线以后,投入足够的纸币或者硬币,就可以自动打印或者制作出车票,还会自动找回零钱。

  • 自动售票机需要用户做两个操作:选择终点或者路线、投入纸币或者硬币,而自动售货机则根据用户的输入做出相应的动作:打印出车票并返回找零,或告知用户余额不足以出票。

    从计算机程序的角度来看,这就是意味着程序需要读用户的两个输入,然后进行一些计算和判断,最后输出结果。

    根据以下思路,我们可以得到简易代码:

    	public static void main(String[] args) {
    //				初始化
    		Scanner in = new Scanner(System.in);
    //				读入投币金额
    		System.out.println("请投币:");
    		int amount = in.nextInt();
    //				打印车票
    		System.out.println("********************");
    		System.out.println("***Java城际铁路专线***");
    		System.out.println("*****无指定座位票*****");
    		System.out.println("*****票价:10元*******");
    		System.out.println("*********************");
    //				计算并打印找零
    		System.out.println("找零:"+(amount - 10));
    	}
    

    代码2-1


注释

我们可以看到代码2-1中,以两个斜杠开头的语句把程序划分成了4个部分:初始化、读入投币金额、打印车票、计算并打印找零。

**注释 (comment)**插入在程序代码中,用来向读者提供解释信息。它们对于程序的功能没有任何影响,但是往往能使得程序更容易被人类读者理解。在以前的学习中,我们常用//(快捷键是alt+/)来注释语句,这是单行注释。

延续数行的注释,要用多行注释的格式来写。多行注释由一对字符序列 【/*】开始,而以【*/】结束。同样的,这也可以用于一行内的注释。


运行代码2-1后,我们发现的一个问题:当输入的金额少于10的时候,我们会得到一个负数的找零金额,显然,这不是我们需要的结果。

计算机的智能是建筑在规则的基础上的,在遇到情况的时候,根据事先制定的规则做出判断,是计算机最基本的能力。

能做判断的基础,是能对数据做比较,比较就是关于两个数据是否相等、谁大谁小的结论,这需要用到关系运算:对两个数据之间的关系的计算。

对此,我们可以在第7行添加一行如下代码,提醒用户输入一个大于10的数字:

System.out.println(amount >= 10);

我们再次运行程序,当输入amount的值大于10时,会多一行”true“的显示;反之,会有一行”false“的显示。

代码中用到的 >= 运算符,我们称之为关系运算符。

关系运算

计算两个值之间的关系,所以叫做关系运算符。(两个符号之间没有空格)

在这里插入图片描述

**关系运算符的优先级:**所有关系运算符的优先级比算术运算的低,但是比赋值运算符的高。判断是否相等的==和 != 优先级比其他的低,而连续的关系运算符是从左到右进行的。

在这里插入图片描述

关系运算的结果:是一个**逻辑值**,逻辑值只有两种可能的值:true(真,表示成立)或false(假,表示不成立)。当两个值的关系符合关系运算符的预期时,关系运算的结果为true,否则为false。

我们之前学习过int和double是两种不同的数据类型,那么它们是否可以作比较呢?

(对于编程,鼓励多写代码去尝试)

我们输入以下代码:

		int a =5;
		double b =5.0;
		System.out.println(a==b);

输出结果是true。

对于double之间的比较呢?

		double a =1.0;
		double b = 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
		System.out.println(a==b);

输出结果是false。

和以前学习的内容有关,这是因为精度不同引起的。所有当我们要比较两个double类型的值,不妨设置一个较小的中间值进行比较,如下代码:

		System.out.println(Math.abs(a-b)<1e-6);

Math.*abs()*是取绝对值的意思,1e-6是科学计数法的表示,用来抵消浮点运算中因为误差造成的相等无法判断的情况,它通常是一个非常小的数字(具体多小要看你的运算误差)。

2.2 判断
2.2.1 if语句和流程图

继续考虑代码2-1,假设我们已经加上了代码 System.out.println(amount >= 10);,但是这仍然不是我们期望的结果:当投入的金额大于等于10元时,才应该进入后续语句;反之,应该给予用户一个错误提示。

因此,我们就要用到if语句了。

if(total > amount)
    total += amount+10;

形如这样的语句称之为if语句。

根据比较的结果,决定做、还是不做某些动作,就要用到if语句。

一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号“{}”之间的若干条语句。如果表示条件的逻辑表达式的结果为true,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的其他语句。

上面举例的if语句这一行(第1行)结束的时候并没有表示语句结束的“ ;”,而后面的赋值语句写在if的下一行,并且缩进了,在这一行结束的时候有一个表示语句结束的“ ”,这表明这条赋值语句是if语句的一部分,if语句拥有和控制这条赋值语句,决定它是否要被执行。

**流程图:**以特定的图形符号加上说明,表示算法的图,称为流程图。

  • 圆角矩形表示“开始”与“结束”。
  • 矩形表示行动方案、普通工作环节用。
  • 菱形表示问题判断或者判定(审核/审批/评审)环节。
  • 用平行四边形表示输入输出。
  • 箭头代表工作流方向。

有的时候我们希望在条件成立的时候做一件事情,而在条件不成立的时候做另外一件事情。这可以在if语句后面跟上一个else子句,形成一个if-else语句。

在这里插入图片描述

**if-else语句:**有的时候我们希望在条件成立的时候做一件事情,而在条件不成立的时候做另外一件事情。这可以在if语句后面跟上一个else子句,形成一个if-else语句。
在这里插入图片描述

2.2.2 嵌套和级联的if

**嵌套的判断:**当if的条件满足或者不满足的时候也要执行的语句也可以是一条if或if-else语句,这就是嵌套的if语句。

if ( code == READY )
    if( count < 20 )
        Sytstem.out.println("一切正常\n");
else
    system.out.println("继续等待\n");//打了空格也没有用,实际上是和最近的if配套

else的匹配:else总是和最近的那个if匹配。

if ( code == READY ){
    if( count < 20 )
        Sytstem.out.println("一切正常\n");
}else
    system.out.println("继续等待\n");//和第一行的if配套

**tips:**在if和else后面总是用{},即使只有一条语句的时候。

级联的if-else if

在这里插入图片描述

2.2.3 if语句常见错误和代码风格

if语句常见错误:

  • 忘了大括号

    推荐永远在if和else后面加上大括号,即使当时后面只有一条语句。

  • if后面的分号

    if后面是不需要加分号的,如果直接加上分号其实是执行了一条空语句。

  • 错误使用==和=

    if只要求()里面的值是零或者非零,不要错误使用赋值语句。

  • 令人困惑的else(不知道和哪一个if匹配)

    else和最近的if匹配。

为了避免错误、美观排版、易于阅读,推荐的代码风格为:

在if和else之后必须加上大括号形成语句块;

大括号内的语句块缩进一个tab的位置。

2.3 分支

多路分支 switch-case语句:

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值