Operators - AP CS A 考点总结 ④

在考试中,一共有7大类的运算符(operators),如下所示:

 

下面我们就一一来看每一类的运算符需要注意的考点有哪些。

1. Arithmetic Operators

首先,这里列出的5种算数运算符(arithmetic operators),对int型和double型变量或数值,都是适用的。

加、减、乘、除,这四则运算没有太多需要注意的,注意别出现除数是0的情况就可以了。

求余运算符(%),需要稍微说一说。一般大家可能对自然数之间的求余运算比较熟悉,换成负数和正数,负数和负数之间的求余运算,大家也要明白是怎么回事,在这里,内在逻辑都是一样的。

另外,double型的数值之间也可以进行求余运算,不信你试试。最后,需要提醒大家的是,求余运算 a % b 中的b也不能为零,否则程序运行时,就会出现ArithmeticException。

最后,需要提醒考生:int型数值或变量之间运算的结果仍是int型;double型数值或变量之间运算的结果仍是double型;int型和double型之间进行的运算,结果就是double型了。

2. Increment/Decrement Operators

自增和自减运算符(increment/decrement operators)是对变量进行加1和减1的操作。虽然我们经常针对int型变量使用,但是,double型变量也是可以使用自增、自减运算符的。

在AP CS A Exam中,自增和自减运算符通常出现在变量的后面的,即后置的,比如:

int a = 0;

a++;

System.out.println(a);

在运行完上述代码之后,a的数值就变成了1 。但是,需要特别注意的是,如果你运行如下程序:

int a = 0;

System.out.println(a++);

结果显示的是“0”,而不是“1”。原因在于后置的自增和自减运算符如果不是独立出现,变量的值虽然改变了,但是还是会使用之前的数值,这是需要大家特别注意的。在这里,再举一个例子:

int[] arr = {1, 2, 3}

int i = 0;

System.out.println(arr[i++]);

注意,上述程序运行的结果是1, 而不是2。

最后,我们要说,自增和自减运算符属于一元运算符,即不需要两个数值(或变量)就能进行运算。

3. Assignment Operators

第三类是赋值操作符(assignment operators),在AP CS A Exam中一共有6种。

“=” 是最基本、最常见的一个赋值操作符。“=”会将右边的数值赋给左边的变量。

“=”可以和前面的5种算数运算符结合,结果就会形成新的赋值操作符,即+=,-=, *=, /=,%=这5种赋值操作符,我们可以把它们叫做“增强赋值操作符”或“简洁赋值操作符”,具体功能如下表所示:

注意,增强赋值操作符在表达式中所有其他操作符计算完成之后才执行,比如:

i /= 2 - 3.5 * 2;

等价于

i = i / (2 - 3.5 * 2);

最后,考生需要牢记,在增强赋值操作符之间没有空格,比如:+ = 应该是+=。

4. Relational Operators

考试中会出现的关系运算符(relational operators)一共有6种。关系运算的结果是boolean值,即true或false,如下表所示:

一般来说,关系运算经常出现在if判断的条件之中。

5. Logical Operators

有3种逻辑运算符(logical operators)会出现在考试中,分别是:非(!),与(&&),或(||)。有时候,是否执行一条命令是由几个条件的组合来决定的;这个时候,就可以使用逻辑运算符对这些条件进行组合。逻辑运算符也被称作布尔运算符(boolean operators),因为它是对布尔值进行的运算。

我们将真值表列在下面:

注:非(!)属于一元运算符

注意,只有当p和q同时为true时,p&&q才会为true;只有当p和q同时为false时,p||q才会为false。

需要大家特别注意的是“逻辑短路”(short-circuit)当在计算p||q的时候,如果p为true,那么q是不会被执行的,比如:

boolean p = true;

boolean q = false;

if (p || (q = true))

     System.out.println(q);

上述程序运行结果会显示为“false”,原因在于p的true值已经足够保证该条件为true,所以后半部分的赋值操作(q=true)不会被执行。

同理,下面程序的运行结果会显示为true,因为q的值已经能够确保这个条件的结果,所以,后面的赋值操作也不会被执行。

boolean p = true;

boolean q = false;

if (!(q && (p = false)))

      System.out.println(p);

最后,大家需要熟练掌握德摩根定律(De Morgan’s Law):

6. Numeric Casts

数值类型转换(numeric casts)会以两种形式出现在考试中,分别是(int)和(double),它们都是一元运算符。类型转换的语法要求把目标类型放在括号内,紧跟其后的是要转换的变量名或值,比如:

System.out.println((int)1.9);

显示结果为1。上述代码就是将double型值转换为int型值,在这个过程中,小数部分会被截去(truncated)。类似的,我们再看下面的代码:

System.out.println((double)1/4);

显示结果就是0.25,因为1首先被转换成了double型的数值1.0,然后再去除以4,结果就是一个double型的数值0.25。

我们实际上还可以利用(int)来进行四舍五入:如果x是负数,使用(int)(x-0.5)就可以将x转换成最接近的整数;如果x是正数,使用(int)(x+0.5)就可以将x转换成最接近的整数。

7. String Concatenation

在AP CS A Exam中,将两个字符串相连接,一般使用“+”,比如:

String str = “Hello”;

System.out.println(str + “ ” + “SAT小帮手!”);

显示结果就是“Hello SAT小帮手!”。

如果将加号( + )用于连接数字和字符串,执行操作时,就会先将数字转换成对应的字符串,再进行连接,比如:

System.out.println(“Java”+2018);

显示结果就是“Java2018”。

最后,我们来看以上这些运算符/操作符的优先等级。比如,有这样一个表达式:

9 + 2*5 > 3 * (5 - 2) + 1 && (11 - 2 > 7)

它的值应该是多少呢?这就涉及到我们该如何区分运算符的优先级和结合规则。我们先来看优先级:

在上表中,优先级高的运算要先进行,如果表达式中的运算符的优先级相同,那么我们需要根据结合规则来决定它们的执行顺序。在以上所列运算符中,除了赋值操作以外,所有的二元运算符都是左结合的,即从左往右依次进行运算;比如:

i + j - k 等价于 (i + j) - k。

再比如:

System.out.println(2018 + 1 + “SAT”);

显示结果就是2019SAT。因为,在执行括号中的运算的时候,会从左往右进行,所以先进行的是2018 + 1,这是一个整数加法,结果就是2019;然后,2019 + “SAT” 才会被执行,注意,这个时候就不是一个数值加法了,而是一个“String Concatenation”,所以结果就是2019SAT。

如果我们将上述运算顺序修改如下:

System.out.println(“SAT” + 2018 +1);

显示结果就是SAT20181。

补充说明:

上文及视频中提到的二元运算符的“左结合”,不包括赋值操作,赋值操作是从右往左进行的,举个例子:

int a=1; int b= 2;

a = b = 3;

System.out.println(a);

System.out.println(b);

运行上述代码,显示结果是:

3

3

原因在于:第二行的赋值运算先将 3 赋值给了 b, 所以 b 的值已经变成 3;然后再将 b 的数值赋值给了 a,于是 a 的值也就变为了3。

再举个例子:

int a = 4; int b = 5;

a %= b %= 3;

System.out.println(a);

System.out.println(b);

运行上述代码,显示结果是什么呢?问题留给大家!^_^


如果有任何问题,欢迎来找小起子聊天。


---------

👉AP Computer Science A 考前刷题精讲班:

上课时间:2018年4月14日(周六)、15日(周日)、21日(周六)、22日(周日)

                  09:00-11:00

上课方式:网络直播课,可回看

课时:每次2小时,总计8小时

费用:2400元(参加过AP CS A 课程的老学员8折优惠)

适合学员:有AP CS A课程基础,准备2018年5月份参加AP考试的同学。

讲题范围:2013年至2017年一共5年的Free Response Questions,共计18道大题。

增值服务:给所有报名学员提供两套小帮手原创AP CS A模考选择题,并提供答疑服务。