Java基础(二)—— 判断

2.1 作比较

2.1.1 比较

自动售票机
  • 售票机,选择了终点或线路之后,投入足够的纸币或硬币,就可以自动打印或制作出车票,还会自动找回零钱。
  • 自动售票机需要用户做两个操作:选择终点或路线、投入纸币或硬币,而自动售货机则根据用户的输入做出相应的动作:打印出车票并返回找零,或告知用户余额不足以出票
  • 从计算机程序的角度看,这就是意味着程序需要读用户的两个输入,然后进行一些计算和判断,最后输出结果。
简易自动售票机
package com.meteor;

import java.util.Scanner;

public class SimpleTicketDispenser {
    public static void main(String[] args) {
//        初始化
        Scanner in = new Scanner(System.in);
//        读入投币金额
        System.out.print("请投币:");
        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));

    }
}
注释
  • 以两个斜杠“//”开头的语句把程序分成了四个部分:
    • 初始化
    • 读入投币金额
    • 打印车票
    • 计算并打印找零
  • 注释(comment) 插入在程序代码中,用来向读者提供解释信息。它们对于程序的功能没有任何影响,但是往往能使得程序更容易被人类读者理解。
  • 延续数行的注释,要用多行注释的格式来写。多行注释由一对字符序列“/“开始,而以“/”结束
    • 这种注释也可用于行内注释

上面的程序当投币金额小于10元时:

请投币:5
**********
Java城际铁路专线
  无指定座位票  
  票价:10元  
**********
找零:-5

找零-5元是不合理的。在投币后加入amount的比较

package com.meteor;

import java.util.Scanner;

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

    }
}
关系运算
  • 计算算两个值之间的关系,所以叫做关系运算
运算符 意义
== 相等
!= 不相等
> 大于
>= 大于或等于
优先级
  • 所有的关系算符的优先级比算术运算的低,但是比赋值运算的高
    • 7 >= 3 + 4
  • 判断是否相等的==和!=的优先级比其他的低,而连续的关系运算是从左到右进行
    • 5 > 3 == 6 > 4

2.2 判断语句

2.2.1 做判断

package com.meteor;

import java.util.Scanner;

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

    }
}
if语句
  • 一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号“{}”之间的若干条语句。如果表示条件的逻辑表达式的结果为true,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的其他语句。
  • if语句这一行结束的时候并没有表示语句结束的“;”,而后面的赋值语句写在if的下一行,并且缩进了,在这一行结束的时候有一个表示语句结束的“;”。这表明这条赋值语句是if语句的一部分,if语句拥有和控制这条賦值语句,决定它是否要被执行。
package com.meteor;

import java.util.Scanner;

public class Age {
    public static void main(String[] args) {
        final int MINOR = 35;
        System.out.print("请输入你的年龄: ");
        Scanner in = new Scanner(System.in);
        int age = in.nextInt();
        System.out.print("你的年龄是"+age);
        if ( age < MINOR )
        {
            System.out.println("年轻是美好的,");
        }
        System.out.println("年龄决定了你的精神世界,好好珍惜吧。");
    }
}
  • 上面这段程序,在第12行,if ( age < MINOR )这一行设置断点(Intellij IDEA如何设置断点),观察程序的执行过程,发现当输入的年龄年龄小于35时,输出了“年轻是美好的”,而输入的年龄大于等于35时跳过了这句话。

2.2.2 判断语句

if-else
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int y = in.nextInt();
int max;
if ( x > y )
    max = x;
else
    max = y;
System.out.println(max);

2.2.3 嵌套和级联的判断语句

  • 输入三个整数,找出最大的数
package com.meteor;

import java.util.Scanner;

public class Max {
    public static void main(String[] args) {
        int x;
        int y;
        int z;
        int max;
        Scanner in = new Scanner(System.in);
        x = in.nextInt();
        y = in.nextInt();
        z = in.nextInt();
        if (x > y) {
            if (x > z) {
                max = x;
            } else {
                max = z;
            }
        } else {
            if (y > z) {
                max = y;
            } else {
                max = z;
            }
        }
        System.out.println("max值为:" + max);
    }
}
  • else总是和最近的那个if匹配
级联的if-else if
        int x;
        int f;
        Scanner in = new Scanner(System.in);
        x = in.nextInt();
        if (x < 0) {
            f = -1;
        } else if (x == 0) {
            f = 0;
        } else {
            f = 2 * x;
        }
        System.out.println(f);
单一出口

上面的程序还有一种不好的实现方法,每次判断都输出f的值。

        int x;
        Scanner in = new Scanner(System.in);
        x = in.nextInt();
        if (x < 0) {
            System.out.println(-1);
        } else if (x == 0) {
            System.out.println(0);
        } else {
            System.out.println(2 * x);
        }

这种写法不符合单一出口原则。如果想把各种情况下的结果都加1,符合单一出口的第一段程序只需在最后输出的时候修改,而第二段程序需要修改每一次的输出。

2.3 多路分支

  • switch-case
  • 控制表达式只能是整数型的结果
  • 根据表达式的结果,寻找匹配的case,并执行case后面的语句,一直到break为止
  • 如果所有的case都不匹配那么就执行defau忙后面的语句;如果没有default,那么就什么都不做
  • switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch结束为止。
package com.meteor.judge;

import java.util.Scanner;

public class SwitchCase {
    public static void main(String[] args) {
        int type;
        Scanner in = new Scanner(System.in);
        type = in.nextInt();
        switch (type) {
            case 1:
            case 2:
                System.out.println("你好");
                break;
            case 3:
                System.out.println("晚上好");
            case 4:
                System.out.println("再见");
                break;
            default:
                System.out.println("什么?");
                break;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u011741311/article/details/79125425
今日推荐