总的来说,Java的条件判断(if)与选择语法与C一致。这一章我们通过几个例子来说明Java的上述语法,同时对一些Java的特性进行讲解。 ## 1. 布尔类型与布尔计算 Java的布尔类型和C保持一致,基本的运算符也和C保持一致。 **注意,布尔类型是 boolean,并有大写的布尔类型Boolean。这两个类型是不同的,小写的是基本类型(与C一致);大写的表示封装类型(类)是面向对象的类型。** ### 1.1. 关系运算 ![](img/20230303170551.png) ### 1.2. 逻辑运算 ![](img/20230303170617.png) ![](img/20230303170628.png) ![](img/20230303170639.png) ![](img/20230303170647.png) ![](img/20230303170657.png) ### 1.3. 位运算 位运算二进制运算,和C中的位运算是一致的,是指把数字按照二进制的每一位进行运算。 例如:0B 和 0A 代表两个byte,转换成位是: | 字节1(0x08) | 字节2(0x07) | 说明 | | --------- | --------- | ------ | | 0000-1000 | 0000-0111 | 对应的二进制 | | 位操作 | 结果 | 说明 | | ------------ | --------- | --------------- | | 0x0A & 0x0B | 0000-1000 | 按照每一位对应进行与运算的结果 | | 0x0A \| 0x0B | 0000-1111 | 按照每一位对应进行或运算的结果 | **位操作作为了解。** ### 1.4. 选择语句 略 ### 1.5. 运算优先级 **尽量使用括号** ### 1.6. 补充例子 #### 1.6.1. 如何循环的读取输入 这个方式在书上没有讲,在考试中可能会遇到这种情况。 ```java import java.util.Scanner; /** * 循环读取,一直到某个特定的条件退出 * * @author Danny * */ public class LoopRead { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Please input a sequence of integer, divided by space."); int sum = 0; while (true) { if (scanner.hasNextInt()) { sum += scanner.nextInt(); } else { break; } } scanner.close(); System.out.println("The sum is: " + sum); } } ``` 试一试运行该代码,你可以一直用空格分割,来输入多个整数,这时程序并没有任何的回应;当你输入一个非整形的字符,例如‘a’,这时程序退出,并打印刚刚输入整数的累加和。 想一想为什么?重点就在于 `scanner.hasNextInt()` 会一直判断下一个输入是否是整数;如果是整数,就返回真;如果不是整数,就返回假,然后执行break函数。 **可以在if语句前面设置断点,然后使用调试工具进行单步跟踪。你会发现,你输入的时候并不会中断;当敲入回车的时候,调试器才会中断;这证明了Scanner是按照一个回车来一次性的读取输入字符串的;如果没有回车,就会一直等待(这是一个阻塞操作)。** 这个例子很有意思,通过调试过程可以让你更清楚知道Java的每个函数是如何运行的,以及它们都有什么特性。 ## 2. 重点 本章的内容中的大部分技术要点都与C保持一致,因此之需要掌握几个例子就可以了: 1. 以下几个例子都比较简单,需要掌握: 1. AdditionQuiz 2. SubtractionQuiz 3. ComputeAndInterpretBMI 4. ComputeTax 5. ChineseZodiac 2. 掌握本页的补充例子,循环读取输入。考试的时候经常会用到。