第二节、流程控制和运算符
一、流程控制
程序控制语句:
(1) if else 语句
if (a>b){
a=0;
}else if(a>c){
a=1;
}else{
a=-1;
}
if(a!=b) a=b; // 当if 或else语句后仅有一条语句时,可以省略大括号
else a=c; // 但为了清晰和防止出错,一般都如第一个例子使用大括号
(2)switch
switch (expression) { // expression参数 必须为 byte,short,int或char类型。
case value1: // value1—valueN必须是与expression兼容,且互不相等的常量
//do something here
break; //break语句是可选的。
case value2:
//do something here
//此处省略break语句
case value3:
//do something here
break;
default: //default为可选,如果expression的值与value1-N不匹配则执行default语句。
a=0;
}
(3)while
int counter=0; //用来计数的变量
boolean condition=true;
while ( condition ) { //判断condition是否为true,如否则结束while循环。
counter++;
if(counter=10){
condition=false; // 当counter=10时,将condition设置为false,
}
}
/** while循环的循环体可以为空
* 因为一个空语句(null statement,仅由一个分号组成的语句)在Java的语法上是合法的。
*/
package Examples;
class Demo {
public static void main(String[] args){
int a,b;
a=100;
b=200;
while(++a<--b); //判断condition时,a先自加1,b自减1,然后再进行a和b的比较
//另外请注意最后必须用分号结束
System.out.println("Midpoint is " + a);
}
}
(4)do-while
int counter=0;
boolean condition=false;
do{ //执行do-while循环时,会先执行循环体再判断condition
counter++;
if(condition){
System.out.println(“第 “+(counter+1)+”次!”);
}
}while( condition ); //注意这里有分号
(5)for
//要注意for中循环初始化部分和反复部分声明的变量不能同for循环所在方法内的变量同名。例:
package Examples;
public class ForDemo{
public void forMethod(){
// int i=0; //当这个声明语句没有被注释掉的话,那么编译时就会出现错误。
for( int i=0; i<10 ; i++){ // 括号中分别为(初始化部分;条件判断;反复部分)
System.out.println("number:"+i);
}
for(int i=10,j=20;i<j;i++,j--){ //循环中初始和反复部分可以声明多个变量,
System.out.println("I is :"+i+" , J is :"+j);
}
}
public static void main(String[] args){
ForDemo fd=new ForDemo();
fd.forMethod();
}
}
(6)跳转语句:
break: 1.终止一个语句序列;2.退出当前循环;3.类似goto的作用,如下例所示
LABEL: {
int a,b;
a=10;
b=2a;
for( int i=0;i<10;i++){
for(int j=0;i<10;j++){
if(i==5&&j==5) break LABEL; //使用break退出LABEL代码块
}
}
}
continue: 1.强迫一个循环提早反复,即忽略循环体中continue语句后面的代码,直接跳到condition处。
2.可以指定一个标签来说明继续哪个包围的循环,如下例所示
package Examples;
public class ContinueDemo{
public static void main(String[] args){
String s;
OUTER: for( int i=1;i<10;i++){ // 由1到9
for(int j=1;j<10;j++){
if(j>i){
System.out.println(); //打印一个空行并换行
continue OUTER;
}
s=(i*j)>9?String.valueOf(i*j):(" "+String.valueOf((i*j)));
System.out.print(" "+i+"x"+j+"="+s);
}
}
}
}
编译后输出的是一个99乘法表。
return: return语句用来明确地从一个方法返回.
二、运算符
(1)算术运算符: 算术运算符不能用在boolean类型上,但可用在char类型,
+ - * / 加,减,乘,除 //整数除法运算中所有余数都会被舍去
% 模运算 //模运算结果是整数除法的余数
++ -- 递增,递减 //在前,则先自加(减)再运算,在后则相反
+= -= *= /= %= 加法赋值,减法赋值,乘法赋值,除法赋值,模运算赋值
//例:a+=10; 等同于a=a+10;a%=2 等同于a=a%2;
(2) 位运算符:
~ & | ^ 按位非(NOT),按位与(AND),按位或(OR),按位异或(XOR)
//非:每位取反; 与:两位均1 则1;或:有1则1;异或:不同为1。
>> >>> << 右移 ; 右移,左边空出的位以0填充; 左移
//移位符号右边数值指定移动位数 value>>num; -1右移的结果总是-1;
&= |= ^= 按位与赋值, 按位或赋值 , 按位异或赋值
>>= >>>= <<= 右移赋值; 右移赋值,左边空出的位以0填充; 左移赋值
(3)关系运算符:
= = != > < >= <= 等于,不等于,大于,小于 ,大于等于, 小于等于
(4)布尔逻辑运算符:
& | ^ 逻辑与,逻辑或,异或
//无论符号左边表达式值为true或false都会对右边表达式进行运算
&& || ! 短路与,短路或,逻辑反 //&&时,当符号左边为false,则不用求符号右边表达式
//||时,如符号左边为true,则不用求符号右边表达式
&= |= ^= 逻辑与赋值,逻辑或赋值,逻辑异或赋值
== != 相等,不等
? : 三元运算符(if-then-else)例 i=i>0? i : -1; //当i>0时i=i;反之i=-1;
(5)运算符优先级 :
高:
( ) [ ] .
++ -- ~ !
* / %
+ -
>> >>> <<
> >= < <=
= = !=
&
^
|
&&
| |
? :
= op=
低:
(6)其他运算符
instanceof 要求运算符左侧的操作数是一个对象或数组值,
右侧操作数是一个数据类型的名称,
如果左侧的操作数是右侧数据类型的一个实例,则true,反之false
Null不是任何对象的实例
if(new int[] {10} instanceof int[])
System.out.println(“True!”);
(7)字符转义序列:
/ddd 八进制字符(ddd)
/uxxxx 十六进制Unicode码字符
/’ 单引号
/” 双引号
// 反斜杆
/r 回车键
/n 换行
/f 换页
/t 水平制表符
/b 退格