• 1. 《Java2实用教程(第4版)》 第3章第 1 页
  • 2. 主要内容 运算符与表达式 语句概述 if条件分支语句 switch开关语句 循环语句 break和continue语句 数组与for语句导读第 2 页
  • 3. §3.1 运算符与表达式 Java提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。Java语言中的绝大多数运算符和C语言相同,基本语句,如条件分支语句、循环语句等也和C语言类似,因此,本章就主要知识点给予简单的介绍 。第 3 页
  • 4. §3.1.1 算术运算符与算术表达式 1.加减运算符: +,- 加减运算符是二目运算符;加减运算符的结合方向是从左到右;加减运算符的操作元是整型或浮点型数据,加减运算符的优先级是4级。 2.乘、除和求余运算符: *,/,% 以上运算符是二目运算符,结合方向是从左到右,乘、除和求余运算符的操作元是整型或浮点型数据。运算符的优先级是3级。 3.算术表达式 用算术符号和括号连接起来的符合java语法规则的式子,称为算术表达式。第 4 页
  • 5. §3.1.2 自增,自减运算符 自增、自减运算符:++,-- 是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。作用是使变量的值增1或减1,如: ++x(--x)表示在使用x之前,先使x的值增(减)1。 x++(x--)表示在使用x之后,使x的值增(减)1。第 5 页
  • 6. §3.1.3 算术混合运算的精度 精度从“低”到“高”排列的顺序是: byte short char int long float double Java在计算算术表达式的值时,使用下列计算精度规则: 1.如果表达式中有双精度浮点数(double型数据),则按双精度进行运算。 2.如果表达式中最高精度是单精度浮点数(float型数据),则按单精度进行运算。 3.如果表达式中最高精度是long型整数,则按long精度进行运算。 4.如果表达式中最高精度低于int型整数,则按int精度进行运算。第 6 页
  • 7. §3.1.4 关系运算符与关系表达式 关系运算符: > , < , >= , <= , == , != 关系运算符是二目运算符,用来比较两个值的关系。关系运算符的运算结果是boolean型,当运算符对应的关系成立时,运算结果是true,否则是false。 第 7 页
  • 8. §3.1.5 逻辑运算符与逻辑表达式 逻辑运算符包括 &&,||,! 其中&&、||为二目运算符,实现逻辑与、逻辑或; !为单目运算符,实现逻辑非。 逻辑运算符的操作元必须是boolean型数据,逻辑运算符可以用来连接关系表达式。 第 8 页
  • 9. §3.1.6 赋值运算符与赋值表达式 赋值运算符:= 赋值运算符是二目运算符,左面的操作元必须是变量,不能是常量或表达式。 赋值运算符的优先级较低,是14级,结合方向右到左。 赋值表达式的值就是“=”左面变量的值。 注意:不要将赋值运算符“=”与等号逻辑运算符“==”混淆。第 9 页
  • 10. §3.1.7 位运算符 对两个整型数据实施位运算,即对两个整型数据对应的位进行运算得到一个新的整型数据。 1.“按位与”运算 “按位与”运算符“&”是双目运算符。 2.“按位或”运算 “按位或”运算符:“|”是二目运算符。 3.“按位非”运算 “按位非”运算符:“~”是单目运算符。 4.“按位异或”运算 “按位异或”运算符:“^”是二目运算符。 注意:参与运算的是两个整型数据、结果也是整型数据。第 10 页
  • 11. 在下面的例子1中,利用“异或”运算的性质,对几个字符进行加密并输出密文,然后再解密,运行效果如图3.1。 例子1第 11 页
  • 12. §3.1.8 instanceof 运算符 instanceof 运算符是二目运算符,左面的操作元是一个对象;右面是一个类。当左面的对象是右面的类或子类创建的对象时,该运算符运算的结果是true ,否则是false。 第 12 页
  • 13. §3.1.9 运算符综述 ◆ Java的表达式就是用运算符连接起来的符合Java规则的式子。 ◆运算符的优先级决定了表达式中运算执行的先后顺序。 ◆在编写程序时尽量的使用括号()运算符号来实现想要的运算次序,以免产生难以阅读或含糊不清的计算顺序。 ◆运算符的结合性决定了并列的相同级别运算符的先后顺序 。 第 13 页
  • 14. §3.2 语句概述 Java里的语句可分为以下六类。 1.方法调用语句。如:System.out.println(" Hello"); 2.表达式语句 表示式尾加上分号。比如赋值语句:x=23; 3.复合语句 可以用{ }把一些语句括起来构成复合语句,如: { z=123+x; System.out.println("How are you"); } 4.空语句。 一个分号也是一条语句,称做空语句。 5.控制语句。控制语句分为条件分支语句、开关语句和循环语句。 6.package语句和 import语句。它们和类、对象有关,将在第4章讲解。第 14 页
  • 15. §3.3 if条件分支语句 条件分支语句按着语法格式可细分为三种形式, if语句 if-else语句 if-else if- ……- else if -else 语句第 15 页
  • 16. §3.3.1 if语句 if语句是单条件分支语句,即根据一个条件来控制程序执行的流程(如图3.2)。 if 语句的语法格式: if(表达式){ 若干语句 } 第 16 页
  • 17. 例子2将变量a,b,c内存中的数值按大小顺序进行互换(从小到大排列)。 public class Example3_2 { public static void main(String args[]) { int a = 9,b = 5,c = 7,t=0; if(b18. §3.3.2 if-else 语句 if-else 语句是双条件分支语句,即根据一个条件来控制程序执行的流程。 if-else 语句的语法格式: if(表达式) { 若干语句 } else { 若干语句 } 第 18 页
  • 19. 例子3中有两条if-else语句,其作用是根据成绩输出相应的信息,运行效果如图3.4。 例子3第 19 页
  • 20. §3.3.3 if-else if-else 语句 if-else if-else 语句是多条件分支语句,即根据多个条件来控制程序执行的流程。 if-else if-else语句的语法格式:if(表达式) { 若干语句 } else if(表达式) { 若干语句 } … … else { 若干语句 } 第 20 页
  • 21. §3.4 switch开关语句 switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值1: 若干个语句 break; case 常量值2: 若干个语句 break; ... case 常量值n: 若干个语句 break; default: 若干语句 }第 21 页
  • 22. 例子4使用了switch语句判断用户从键盘输入的正整数是否为中奖号码。 例子4import java.util.Scanner; public class Example3_4{ public static void main(String args[]) { int number = 0; System.out.println("输入正整数(回车确定)"); Scanner reader = new Scanner(System.in); number = reader.nextInt(); switch(number) { case 9 : case 131 : case 12 : System.out.println(number+"是三等奖"); break; case 209 : case 596 : case 27 : System.out.println(number+"是二等奖"); break; case 875 : case 316 : case 59 : System.out.println(number+"是一等奖"); break; default: System.out.println(number+"未中奖"); } } } 第 22 页
  • 23. §3.5 循环语句 §3.5.1 for循环语句 for语句的语法格式: for (表达式1; 表达式2; 表达式3) { 若干语句 } for语句的执行规则是: (1)计算“表达式1”,完成必要的初始化工作。 (2)判断“表达式2”的值,若“表达式2”的值为true,则进行(3),否则进行(4)。 (3)执行循环体,然后计算“表达式3”,以便改变循环条件,进行(2)。 (4)结束for语句的执行。 第 23 页
  • 24. 例子5计算8+88+888+8888… …的前12项和 例子5public class Example3_5 { public static void main(String args[]) { long sum = 0,a = 8,item = a,n = 12,I = 1; for(i=1;i<=n;i++) { sum = sum+item; item = item*10+a; } System.out.println(sum); } } 第 24 页
  • 25. §3.5.2 while 循环 while语句的语法格式: while (表达式) { 若干语句 } while语句的执行规则是: (1)计算表达式的值,如果该值是true时,就进行(2),否则执行(3)。 (2)执行循环体,再进行(1)。 (3)结束while语句的执行。 第 25 页
  • 26. §3.5.3 do-while循环 do-while语句的语法格式: do { 若干语句 } while(表达式); do- while语句的执行规则是: (1)执行循环体,再进行(2)。 (2)计算表达式的值,如果该值是true时,就进行(1),否则执行(3)。 (3)结束while语句的执行。 第 26 页
  • 27. 例子6用while语句计算1+1/2!+1/3!+1/4! … 的前20项 例子6public class Example3_6 { public static void main(String args[]) { double sum = 0,item = 1; int i = 1,n = 20; while(i<=n) { sum = sum+item; i = i+1; item = item*(1.0/i); } System.out.println("sum="+sum); } } 第 27 页
  • 28. §3.6 break和continue语句 break和continue语句是用关键break或continue加上分号构成的语句。 在循环体中可以使用break语句和continue语句。 如果在某次循环中执行了break语句,那么整个循环语句就结束。如果在某次循环中执行了continue语句,那么本次循环就结束,即不再执行本次循环中循环体中continue语句后面的语句,而转入进行下一次循环。 第 28 页
  • 29. 例子7 使用了continue和break语句 计算1+3+5… 输出100内的素数.例子7public class Example3_7 { public static void main(String args[]) { int sum=0,i,j; for( i=1;i<=10;i++) { if(i%2==0) { //计算1+3+5+7+9 continue; } sum=sum+i; } System.out.println("sum="+sum); for(j=2;j<=100;j++) { //求100以内的素数 for( i=2;i<=j/2;i++) { if(j%i==0) break; } if(i>j/2) { System.out.println(""+j+"是素数"); } } } } 第 29 页
  • 30. §3.7 for语句与数组 JDK1.5后,对for语句的功能给予扩充、增强,以便更好地遍历数组。语法格式如下: for(声明循环变量:数组的名字) { … } 其中,声明的循环变量的类型必须和数组的类型相同。这种形式的for语句类似自然语言中的“for each”语句,为了便于理解上述for语句,可以将这种形式的for语句中翻译成“对于循环变量依次取数组的每一个元素的值”。 第 30 页
  • 31. 例子8分别使用for语句的传统方式和改进方式遍历数组。 例子8public class Example3_8 { public static void main(String args[]) { int a[] = {1,2,3,4}; char b[] = {'a','b','c','d'}; for(int n=0;n
  • 32. 3.8 应用举例 例子9中,用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数字字符串结束整个输入操作过程。程序将计算出这些数的和以及平均值。效果如图3.9所示。在从键盘输入数据时,经常让reader对象先调用hasNextXXX()方法等待用户在键盘输入数据,然后再调用nextXXX()方法获取用户输入的数据。 例子9第 32 页
  • 33. 第 33 页