二、Java v.s. 神算子(2)
2.运算符
运算符用来进行函数运算。Java中的运算符可以分为算术运算符、关系运算符、条件运算符、位移与逻辑运算符、赋值运算符以及其他一些运算符组成。
下面,用“(X % 3 == 2) && (X % 5 == 3) && (X % 7 == 2)”来理解Java运算符的概念。
刚才已经说过了,“X”是一个变量,“%”是取模的算术运算符,“X % 3”即X模3,就是X除以3的余数;“==”是关系运算符,当“==”两边相等时返回true,否则就是false。从而,“X % 3 == 2”的意思就很明白了??如果X除以3的余数是2,则这个表达式的值就是true,否则为false。一对“()”是用来表示运算的优先级,即括号里面的表达式首先被计算,然后才是括号外的。“&&”读作and,是条件运算符,是逻辑运算里面的合取,即当且仅当“&&”两边都是true的时候,表达式为true,否则为false。现在回过头看上面这个表达式的意思就是:X除以3余2并且X除以5余3并且X除以7余2,表达式的结果显然是一个布尔值,不是true就是false。
3.流程控制
程序是以文件形式保存在磁盘上的。如果没有流程控制,Java解释器将从顶向下、从左到右执行语句。而用流程控制语句,你可以选择性地执行部分语句,重复执行一些语句,或者改变语句的顺序流程,从而完成千变万化的工作。
首先介绍if流程控制语句。if语句允许你选择性地执行某些语句,跟“如果怎样则如此这般”的意思一样。比如,我们的程序是这样写的:
if ((X % 3 == 2) && (X % 5 == 3) && (X % 7 == 2)) {
System.out.print("这个数字是:");
System.out.print(X);
}
联系上面关于运算符的知识,很明显,这句话的意思是:如果“X除以3余2并且X除以5余3并且X除以7余2”,则“把这个数字打印出来”,是不是跟日常生活的语法非常接近?
下面看看外层的for流程控制语句。for语句是循环语句,用来遍历一段数值。基本语法形式如下:
for (初始化; 终止判断; 增量) {
执行语句
}
在循环执行前,初始化部分将首先被执行。比如我们的代码中,初始化语句是:X = 0,表示把0赋给变量X,即从0开始测试是否满足题意。之后,执行语句将被调用,即上面的if语句??若当前的X(这时是0)满足题意便打印出来。然后,增量语句将被执行,即X++,意思是把X的值增加1,即我们要尝试1是否满足题意的解。最后,终止判断语句将被执行,这里是“X < 100”,表示若X小于100则重复以上步骤,否则停止循环,执行后面的代码。
可以看到,控制整个循环的主要部分是增量和终止判断,没有增量的变化,就无法达到依次尝试0到99这些数字是否满足题意;如果没有终止判断,循环就无法停止,可能进入所谓的死循环甚至死机??吓唬你的,有Eclipse在,即使写出造成死循环的豆腐渣代码,按下Eclipse中的停止按钮,照样安然无事。可惜我们的防汛工作却没有这样的救命按钮,必须脚踏实地,来不得半点马虎。
OK,现在真相已经大白了!我们的Java代码不过是从0到99依次尝试,看看是否“三三数之剩二,五五数之剩三,七七数之剩二”,如果是则把该数字打印出来。借助电脑几近暴力的速度,从而在短短1秒内解开黄蓉的谜题!黄老邪估计也不得不悄悄地低头买下有《Java咖啡馆》连载的《电脑爱好者》杂志闭门修炼大脑,哈哈哈……