• 1. 第 2 章 java语言基础 作者: 张思民
  • 2. 本章主要内容:2.1基本数据类型 2.2基本数据类型应用示例 2.3表达式和运算符 2.4 程序控制语句
  • 3. 2.1基本数据类型2.1.1 Java的数据类型 2.1.2 常量与变量 2.1.3 变量赋值 2.1.4 关键字 2.1.5 转义符
  • 4. 2.1.1 Java的数据类型 Java定义了8个基本数据类型: 字节型(byte),短整型(short),整型(int),长整型(long),字符型(char),浮点型(float),双精度型(double),布尔型(boolean)。 这8个基本数据类型可分为4组:
  • 5. 2.1.1 Java的数据类型 · 整数型:该组包括字节型(byte),短整型(short),整型(int),长整型(long),它们有符号整数。 · 实数数型:该组包括单精度型(float),双精度型(double),它们代表有小数精度要求的数字。实数数型又称为浮点类型。 · 字符:这个组包括字符型(char),它代表字符集的符号,例如字母和数字。 · 布尔型:这个组包括布尔型(boolean),它是一种特殊的类型,表示真/假值。
  • 6. 北京传智播客教育 www.itcast.cn常量与变量数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte, short, int, long)浮点类型(float, double)类(class)接口(interface)数组( [ ] )整数默认:int 小数默认:doubleJava语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
  • 7. 表2-1   Java的基本数据类型 类型数据类型关键字适用于类型长度值域范围字节byte 非常小的整数1-128~127短整short较小的整数2-215~215-1内的整数整数int 一般整数4-231~231-1内的整数长整long非常大的整数4-231~231-1内的整数单精度实数 float一般实数4-3.402823*1038~ 3.402823*1038内的数双精度实数 double非常大的实数8-1.7977*10308~ 1.7977*10308内的数字符char单个字符1逻辑boolean判断1true和false
  • 8. 2.1.2常量与变量常量表示不能改变的数值。 Java中常量的分类: 1,整数常量。所有整数 2,小数常量。所有小数 3,布尔(boolean)型常量。较为特有,只有两个数值。true false。 4,字符常量。将一个数字字母或者符号用单引号( ' ' )标识。 5,字符串常量。将一个或者多个字符用双引号(“ ”)标识。 6,null常量。只有一个数值就是:null. 对于整数:有四种表现形式。 二进制:0,1 ,满2进1. 八进制:0-7 ,满8进1. 用0开头表示。 十进制:0-9 ,满10进1. 十六进制:0-9,A-F,满16进1. 用0x开头表示。
  • 9. 2.1.2常量与变量变量的概念: 内存中的一个存储区域 该区域有自己的名称(变量名)和类型(数据类型) 该区域的数据可以在同一类型范围内不断变化 为什么要定义变量: 用来不断的存放同一类型的常量,并可以重复使用 使用变量注意: 变量的作用范围(一对{}之间有效) 初始化值 定义变量的格式: 数据类型 变量名 = 初始化值; 注:格式是固定的,记住格式,以不变应万变。 理解:变量就如同数学中的未知数。
  • 10. 2.1.2常量与变量声明变量的格式为:数据类型 变量名1,变量名2,…  ; 例如: int a; int x, y, sum; 在Java中,常量的声明与变量的声明非常类似,例如: final int DAY = 24; // DAY的值在整个程序中不变, final double PI = 3.14159; //声明圆周率常数
  • 11. 2.1.3 变量赋值在程序中经常需要对变量赋值,在Java中用赋值号(=)表示。 所谓赋值,就是把赋值号右边的数据或运算结果赋给左边的变量。 其一般格式为: 变量 = 表达式;
  • 12. 2.1.3 变量赋值例如: int x = 5; // 指定x为整型变量,并赋初值5 char c = ‘a’; //指定a为字符型变量,并赋初值 ‘a‘ 如果同时对多个相同类型的变量赋值,可以用逗号分隔,如: int x = 5,y = 8,sum; sum = x + y; //将x+y的运算结果赋值给变量sum 在Java语言中,经常会用到形如“x = x + a”的赋值运算,如: int x = 5; x = x + 2; 这里,右边x的值是5,加2后,把运算结果7赋值给左边的变量x,所以x的值是7。
  • 13. 北京传智播客教育 www.itcast.cn常量与变量自动类型转换(也叫隐式类型转换) 强制类型转换(也叫显式类型转换) 类型转换的原理 什么时候要用强制类型转换? 表达式的数据类型自动提升 所有的byte型、short型和char的值将被提升到int型。 如果一个操作数是long型,计算结果就是long型; 如果一个操作数是float型,计算结果就是float型; 如果一个操作数是double型,计算结果就是double型。 分析 System.out.println(‘a’)与System.out.println(’a’+1) 的区别。
  • 14. 北京传智播客教育 www.itcast.cn常量与变量自动类型提升 byte b = 3; int x = 4; x = x + b;//b会自动提升为int类型进行运算。 强制类型转换 byte b = 3; b = b + 4;//报错 b = (byte)b+4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。 思考: byte b1=3,b2=4,b; b=b1+b2; //报错 b=3+4; 哪句是编译失败的呢?为什么呢? byte b=(byte) (b1+1); //报错 int 运算的最小类型
  • 15. 2.1. 4 关键字用于定义访问权限修饰符的关键字privateprotectedpublic用于定义类,函数,变量修饰符的关键字abstractfinalstaticsynchronized用于定义类与类之间关系的关键字extendsimplements用于定义建立实例及引用实例,判断实例的关键字newthissuperinstanceof用于异常处理的关键字trycatchfinallythrowthrows用于包的关键字packageimport其他修饰符关键字nativestrictfptransientvolatileassert
  • 16. 标识符在程序中自定义的一些名称。 由26个英文字母大小写,数字:0-9 符号:_ $ 组成 定义合法标识符规则: 1,数字不可以开头。 2,不可以使用关键字。 Java中严格区分大小写。 注意:在起名字的时,为了提高阅读性,要尽量有意义。
  • 17. 标识符Java中的名称规范: 包名:多单词组成时所有字母都小写。 xxxyyyzzz 类名接口名:多单词组成时,所有单词的首字母大写。 XxxYyyZzz 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。 xxxYyyZzz 常量名:所有字母都大写。多单词时每个单词用下划线连接。 XXX_YYY_ZZZ
  • 18. 注释用于注解说明解释程序的文字就是注释。 提高了代码的阅读性。 Java中的注释格式: 单行注释 格式: //注释文字 多行注释 格式: /* 注释文字 */ 文档注释 格式:/** 注释文字 */
  • 19. 注释/** 这是我的Hello World程序。 @author 小强 */ class Demo { /* 这是主函数,是程序的入口 它的出现可以保证程序的独立运行, */ public static void main(String[] args) { //这是输出语句用于将括号内的数据打印到控制台。 System.out.println("Hello World"); } }
  • 20. 2.1.5 转义符 在Java语言中提供了一些特殊的字符常量,这些特殊字符称为转义符。通过转义符可以在字符串中插入一些无法直接键入的字符,如换行符、引号等。每个转义符都以反斜杠(\)为标志。例如,‘\n’代表一个换行符,这里的‘n’不再代表字母n而作为‘换行’符号。
  • 21. 2.1.5 转义符转义符含  义\b退格\f走纸换页\n换行\r回车\t横向跳格 (Ctrl-I)\'单引号\"双引号\\反斜杠
  • 22. 2.2基本数据类型应用示例2.2.1 整数类型与浮点类型 2.2.2 字符型 2.2.3 布尔型 2.2.4 数据类型的转换
  • 23. 2.2.1 整数类型与浮点类型 1、整数类型 当用变量表示整数时,通常将变量声明为整数类型。
  • 24. 【例2-1】下面的程序用整型变量计算二个数的和。1 /* 计算二个数的和 */ 2 import javax.swing.*; 3 class Example2_1 4 { 5 public static void main(String args[]) 6  { 7 int x, y, sum; 8 x = 3; 9 y = 5; 10 sum = x + y; //求和 11  JOptionPane.showMessageDialog(null, 12 "x=3;" + "\n y=5;" + "\n x+y=" + sum); 12  System.exit(0); 13 } 14 } 声明3个整型变量给变量x,y赋值在对话框窗体中显示结果,\n为换行符
  • 25. 在程序的第7行,声明了三个整型变量x、y、sum。 在程序运行到第8行语句时,数值3存放到x中, 运行到第9行语句时,数值5存放到y中。 程序运行到第10行语句时,将内存单元x和内存单元y中的值相加并将结果放到变量sum中。
  • 26. 将程序保存为Example2_1.java。编译程序: javac Example2_1.java 运行程序: java Example2_1
  • 27. 2.2.1 整数类型与浮点类型 2、浮点类型   浮点数也称为实数,当计算的表达式有精度要求时就要使用浮点类型。
  • 28. 【例2-2】用双精度浮点型变量计算一个圆的面积 。 import javax.swing.*; class Example2_2 { public static void main(String args[]) { double pi, r, s; r = 10.8; //圆的半径 pi = 3.14159; s = pi * r * r; //计算圆的面积 JOptionPane.showMessageDialog(null, "圆的面积为:" + s); System.exit(0); } }//由于要表示小数,故声明3个浮点类型变量//变量赋值在对话框窗体中显示结果
  • 29. 将程序保存为Example2_2.java。编译程序: javac Example2_2.java 运行程序: java Example2_2
  • 30. 2.2.2 字符型1、字符变量 在Java中,存储字符的数据类型是char,一个字符变量每次只能存放一个字符。
  • 31. 【例2-3】下面的程序演示char 类型变量的用法。1 /* char 类型变量的用法 */ 2 import javax.swing.*; 3 class Example2_3 4 { 5 public static void main(String args[]) 6 { 7 char ch1,ch2,ch3; 8 ch1 = 88; // 88在Unicode码中对应的是字母X 9 ch2 = 'Y'; ch3 = '汉'; 10 JOptionPane.showMessageDialog(null,"ch1、ch2、ch3:" 11 + ch1 + "、" + ch2+ "、" +ch3); 12 System.exit(0); 13 } 14 }
  • 32. 注意:在程序的第8行,变量ch1赋值为88,它是字母X在ASCII码(Unicode码也一样)中的值。 将程序保存为Example2_3.java。编译程序: javac Example2_3.java 运行程序: java Example2_3
  • 33. 2.2.2 字符型2、字符串 用双引号括起来的多个(也可以是一个或空)字符常量称为字符串。 例如: “我对 Java 很痴迷! \n”; “a + b =”; 字符串与字符比较有如下区别: 字符是由单引号括起来的单个字符。而字符串是由双引号括起来的,且可以是零个或多个字符。例如:‘abc’是不合法的。“”是合法的,表示空字符串。
  • 34. 2.2.3 布尔型 Java表示逻辑值的基本类型,称为布尔型。它只有两个值true和false 。 【例2-4】说明布尔类型的使用 。 class Example2_4 { public static void main(String args[])    { boolean b; b = false; System.out.println("b is " + b); b = true; System.out.println("b is " + b); //关系运算操作的结果为boolean值 System.out.println("10 > 9 is " + (10 > 9)); } }
  • 35. 2.2.4 数据类型的转换 在Java语言中对已经定义了类型的变量,允许转换变量的类型。变量的数据类型转换分为“自动类型转换”和“强制类型转换”两种。 1、自动类型转换 对于基本数据类型按精度从“低”到“高”的顺序为:
  • 36. 2.2.4 数据类型的转换当把级别低的变量的值赋给级别高的值时,系统自动进行数据类型转换。 例如  int x = 10; float y; y = x; 这时y的值为10.0。
  • 37. 2.2.4 数据类型的转换2、强制类型转换 强制类型转换是指当把级别高的变量的值赋给级别低的变量。 转换的格式为: (类型名)要转换的值或变量; 例如:设有 int a; double b = 3.14; 将b强制类型转换为int类型后,再赋值给a 则 a = (int)b; 结果 a = 3,b仍然是double类型,b的值仍然是3.14。
  • 38. 2.3 表达式和运算符2.3.1 表达式与运算符 2.3.2 算术运算符 2.3.3 关系与逻辑运算符
  • 39. 运算符算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三元运算符
  • 40. 北京传智播客教育 www.itcast.cn算术运算符
  • 41. 算术运算符算术运算符的注意问题 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。 对于除号“/”,它和整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:System.out.print(5/3.0); 1.6666666666666667 System.out.print(5/2); 2 “+”除字符串相加功能外,还能把非字符串转换成字符串 , 例如:System.out.println("5+5="+5+5);//打印结果是?
  • 42. 比较运算符注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。 注2:比较运算符“==”不能误写成“=” 。
  • 43. 逻辑运算符
  • 44. 逻辑运算符逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6 。 “&”和“&&”的区别: 单&时,左边无论真假,右边都进行运算; 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。 “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
  • 45. 三元运算符格式 (条件表达式)?表达式1:表达式2; 如果条件为true,运算后的结果是表达式1; 如果条件为false,运算后的结果是表达式2; 示例: 获取两个数中大数。 int x=3,y=4,z; z = (x>y)?x:y;//z变量存储的就是两个数的大数。
  • 46. 2.3.1 表达式与运算符 1、表达式 表达式是由运算符、操作数和方法调用按照语言的语法构造而成的符号序列。 例如,计算式 写成表达式为:   (x + y ) / (y * (x – y));
  • 47. 【例2-5】public class Example2_5 { public static void main(String[] agrs) { //定义几个变量并赋值 int a=41; int b=21; double x=6.4; double y=3.22; System.out.println("变量数值:"); System.out.println("a="+a + "\t b="+b + "\t x="+x + "\t y="+y); //加法 System.out.println("加:"); System.out.println("a+b="+(a+b) + "\t x+y="+(x+y)); //减法 System.out.println("减:"); System.out.println("a-b="+(a-b) + "\t x-y="+(x-y)); //乘法 System.out.println("乘:"); System.out.println("a*b="+(a*b) + "\t x*y="+(x*y)); //除法 System.out.println("除:"); System.out.println("a/b="+(a/b) + "\t x/y="+(x/y)); //从除法中求得余数 System.out.println("计算余数:"); System.out.println("a%b="+(a%b) + "\t x%y="+(x%y)); //混合类型 System.out.println("混合类型:"); System.out.println("b+y="+(b+y) + "\t a*x="+(a*x)); } }
  • 48. 自增/自减运算符为+ +和- -。+ +完成自加1;而- -完成自减1。 例如: (1)int x = 2; int y = (++x) * 5; //执行结果:x = 3, y = 15 (2)int x = 2; int y = (x++) * 5; //执行结果:x = 3, y = 10
  • 49. 【例2-6】用关系运算符比较三个整数。public class Example2_6 { public static void main(String[] args) { //定义若干整型数 int i=37; int j=42; int k=42; System.out.println("变量数值: "); System.out.println("i="+i+"\t j="+j+"\t k="+k); //大于 System.out.println("大于:"); System.out.println("i>j="+(i>j));//false System.out.println("j>i="+(j>i));//true System.out.println("k>j="+(k>j));//false //大于等于 System.out.println("大于等于:"); System.out.println("i>=j="+(i>=j));//false System.out.println("j>=i="+(j>=i));//true System.out.println("k>=j="+(k>=j));//true
  • 50. //小于 System.out.println("小于:"); System.out.println("i
  • 51. public class Ex2_61 { public static void main(String[] args) { int i=37; int j=42; System.out.println((i>j)&&(11/0>9));//短路 System.out.println(); //System.out.println((j>i)&&(11/0>9));//非短路 System.out.println((i>j)&(11/0>9));//非短路 } }
  • 52. public class Ex2_62 { public static void main(String[] args) { int i=37; int j=42; System.out.println((j>i)||(11/0>9));//短路 System.out.println(); //System.out.println((i>j)||(11/0>9));//非短路 System.out.println((j>i)|(11/0>9));//非短路 } }
  • 53. 北京传智播客教育 www.itcast.cn2.4 程序流程控制顺序结构 选择结构 循环结构
  • 54. 2.4 程序控制语句2.4.1语句 2.4.2 键盘输入语句 2.4.3 顺序控制语句 2.4.4 if选择语句 2.4.5 switch语句 2.4.6 循环语句 2.4.7 跳转语句
  • 55. 2.4.1 语句语句是程序的基本单元,它类似于自然语言的句子。Java语言的语句可分为以下几类: (1)表达式语句 x = 3; y = 5; sum = x + y; 一个表达式的最后加上一个分号就构成了一个语句,分号是语句不可缺少的部分。
  • 56. 程序基本结构 Java语言和其他结构化编程语言一样,都支持顺序、分支、循环这三种程序控制结构。这三种结构的逻辑执行流程如下所示。
  • 57. (2)复合语句 用{ }把一些语句括起来构成复合语句。 { x=25+x; System.out.println(“x=”+x); } (3)控制语句 控制语句用于控制程序流程及执行的先后顺序。主要有:顺序控制语句、条件控制语句和循环控制语句
  • 58. 2.4.2 键盘输入语句在java中,使用简单文本扫描器Scanner类可以接受用户从键盘输入的数据。Scanner可以从System.in中读取数据。Scanner实现键盘输入数据的方法如下: Scanner sc = new Scanner(System.in); int a = sc.nextInt(); double b = sc.nextDouble(); String str = sc.next();
  • 59. 【例2-7】从键盘输入数据。 import java.util.*; public class Example2_7 { public static void main(String args[]) { Scanner reader=new Scanner(System.in); System.out.print("输入一个整数:"); int a = reader.nextInt(); System.out.print("输入一个实数:"); double b = reader.nextDouble(); System.out.println(a+b); System.out.print("输入一串字符:"); String s = reader.next(); System.out.println(s); } }
  • 60. 2.4.3 顺序控制语句顺序控制是指计算机在执行这种结构的程序时,从第一条语句开始,按从上到下的顺序依次执行程序中的每一条语句。顺序控制是程序的最基本结构,包含有选择控制语句和循环控制语句的程序,在总体执行上也是按顺序结构执行的。
  • 61. 【例2-8】交换两个变量的值。 在编写程序时,有时需要把两个变量的值互换,交换值的运算需要用到一个中间变量。例如,要将a与b 的值互换,就可用下面这样一段程序: int a, b, temp; temp = a; a = b; b = temp;设temp为中间变量第一步:把a的值放到中间变量temp中第二步:把b的值放到变量a中第三步:把temp中原a的值放到变量b中
  • 62. 交换过程如图所示:
  • 63. 1 /* 交换a、b两变量的值 */ 2 import javax.swing.*; 3  public class Example2_8 4 { 5 public static void main(String args[]) 6 { 7 int a = 3, b = 5, temp; 8 temp = a; 9 a = b; 10 b = temp; JOptionPane.showMessageDialog(null, "a = " + a + "\t b =" + b ); 12 System.exit(0); 13 } 14 }交换a、b两变量的值
  • 64. 将程序保存为Example2_8.java。编译程序: javac Example2_8.java 运行程序: java Example2_8 程序的运行结果如图所示
  • 65. 2.4.4 判断结构if语句 三种格式: if(true) { 执行语句; } if(条件表达式) { 执行语句; } else { 执行语句; } if(条件表达式) { 执行语句; } else if (条件表达式) { 执行语句; } …… else { 执行语句; }
  • 66. 2.4.4 if选择语句1、单分支选择结构 if语句用于实现选择结构。它判断给定的条件是否满足,并根据判断结果决定执行某个分支的程序段。对于单分支选择语句,其的语法格式为: if(条件表达式) { 若干语句; }
  • 67. 这个语法的意思是,当条件表达式所给定的条件成立时(true),就执行其中的语句块,若条件不成立(false),则跳掉这部分语句,直接执行后续语句。 其流程如图所示:
  • 68. 【例2-9】从键盘任意输入两个整数,按从小到大的顺序依次输出这两个数。从键盘上输入的两个数a、b,如果a < b,本身就是从小到大排列的,可以直接输出。但如果a > b,则需要交换两个变量的值。其算法流程如图所示。
  • 69. 1 /* 从键盘任意输入两个整数,按从小到大的顺序排序 */ 2 import java.util.*; 3  public class Example2_9 4 { 5 public static void main(String args[]) 6   { 7   int a, b, temp; 8 Scanner reader = new Scanner(System.in); 9 System.out.print("输入一个整数:"); 10 a = reader.nextInt(); 11 System.out.print("再输入一个整数:"); 12 b = reader.nextInt(); 13 System.out.println( "排序前:" + a + "," + b ); 14   if(a > b) 15   { 16   temp = a; 17   a = b; 18   b = temp; 19   } 20  System.out.println("排序后:" + a + "," + b ); 21 }
  • 70. 【例2-10】对给定的三个数,求最大数的平方。设一变量max存放最大数,首先将第一个数a放入变量max中,再将max与其它数逐一比较,较大数则存放到max中,当所有数都比较结束之后,max中存放的一定最大数。其算法流程如图所示。
  • 71. 1 /* 求三个数中最大数的平方 */ 2 import javax.swing.*; 3  public class Example2_10 4 { 5 public static void main(String args[]) 6   { 7 int a = 5, b = 9, c = 7, max; 8 max = a; 9 if (b>max) { max = b; } 10 if (c>max) { max = c; } 11 JOptionPane.showMessageDialog(null," 最大数的平方为:"+ max * max); 12  System.exit(0); 13 } 14 }
  • 72. 2、双分支选择结构   有时需要在条件表达式不成立的时候执行不同的语句,可以使用另一种双分支选择结构的条件语句,即if-else语句。双分支选择结构的语法格式为: if(表达式) { 语句块1;} else { 语句块2;}
  • 73. 这个语法的意思是,当条件式成立时(true),执行语句块1,否则(else)就执行语句块2。 对于双分支选择类型的条件语句,其流程如图所示:
  • 74. 【例2-11】计算 y = 其算法流程如图所示: x ≤ -5 或 x ≥ 5-5 < x < 5
  • 75. 1 /* if-else应用示例 */ 2 import java.util.*; 3 public class Example2_11 4 { 5 public static void main(String[] args) 6 { 7 double x, y; 8 Scanner sc = new Scanner(System.in); 9 x = sc.nextDouble(); 10 if( x < 5 && x > -5 ) 11 y = Math.sqrt( 25 - x * x ); 12 else 13 y = Math.sqrt( x * x - 25 ); 14 System.out.println("y = "+y); 15 } 16 }
  • 76. 【例2-12】编写一程序,根据月份判断季节。1 /* if-else-if 结构. */ 2 import javax.swing.*; 3 class Example2_12 { 4 public static void main(String args[]) 5    { 6    int month = 4; // 4月份 7   String season; 8 if(month == 12 || month == 1 || month == 2) 9 {season = "冬天";} 10 else if(month == 3 || month == 4 || month == 5) 11 {season = "春天"; } 12 else if(month == 6 || month == 7 || month == 8) 13 {season = "夏天"; } 14 else if(month == 9 || month == 10 || month == 11) 15 {season = "秋天"; } 16 else 17 { season = "不合法的月份"; } 18 JOptionPane.showMessageDialog(null,"4月是 " + season + "."); 19 System.exit(0); 20 } 21 }
  • 77. 2.4.5 switch语句switch语句是一个多分支选择语句,也叫开关语句。它可以根据一个整型表达式有条件地选择一个语句执行。 switch语句 格式: switch(表达式) { case 取值1: 执行语句; break; case 取值2: 执行语句; break; …... default: 执行语句; break; }
  • 78. switch语句的流程图如图所示:
  • 79. 选择结构switch语句特点: a)switch语句选择的类型只有四种:byte,short,int , char。 b)case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。 c)结束switch语句的两种情况:遇到break,执行到switch语句结束。 d)如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
  • 80. 【例2-13】将百分制转换为五级记分制。1 /* switch开关语句 */ 2 import javax.swing.*; 3 public class Example2_13 4 { 5  public static void main(String args[]) 6  { 7   int 分数 = 82; 8   String grade; 9  switch(分数/10) 10  { 11   case 10 : 12  case 9: 13   grade = "优"; 14  break; 15  case 8: 16  grade = "良"; 17  break; 18  case 7: 19  grade = "中"; 20  break; 21  case 6: 22  grade = "及格"; 23  break; 24  default: 25  grade = "不及格"; 26  } 27  JOptionPane.showMessageDialog(null, "成绩等级:" + grade); 28  System.exit(0); 29  } 30 }
  • 81. 注意:这里不能使用下列程序段: switch(分数) { case 分数>=90 : grade="优"; break; case 分数>=80 : grade="良"; break; case 分数>=70 : grade="中"; break; case 分数>=60 : grade="及格"; break; default: grade="不及格"; } 因为case分支的值必须与switch(分数)中的分数数据类型一致,而“分数>=90”为关系运算,其值为true或false,是布尔型,不是int型。
  • 82. 2.4.6 循环语句在程序设计过程中,经常需要将一些功能按一定的要求重复执行多次,我们将这一过程称为循环。 循环结构是程序设计中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。
  • 83. 1、for循环语句for循环语句的语法结构如下: 格式: for(初始化表达式;循环条件表达式;循环后的操作表达式) { 执行语句;(循环体) } 注: for里面的两个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。 while与for可以互换,区别在于for为了循环而定义的变量在for循环结束时就在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。 最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
  • 84. 在for语句中,其语法成分是; (1)循环变量赋初值是初始循环的表达式,它在循环开始的时候就被执行一次。 (2)循环条件决定什么时候终止循环,这个表达式在每次循环的过程被计算一次。当表达式计算结果为false的时候,这个循环结束。 (3)增量表达式是每循环一次循环变量增加多少(即步长)的表达式。 (4)循环体是被重复执行的程序段。
  • 85. for语句的执行过程是这样的: 首先执行循环变量赋初值,完成必要的初始化工作; 再判断循环条件,若循环条件能满足,则进入循环体中执行循环体的语句; 执行完循环体之后,紧接着执行for语句中的增量表达式,以便改变循环条件,这一轮循环就结束了。 第二轮循环又从判断循环条件开始,若循环条件仍能满足,则继续循环,否则跳出整个for语句,执行后续语句。
  • 86. 循环语句的执行过程
  • 87. 【例2-14】求从1加到100的和。/* 累加器 */ import javax.swing.JOptionPane; public class Example2_14 { public static void main(String[] args) { int sum=0; for(int i=1;i<=100;i++) { sum=sum+i; } JOptionPane.showMessageDialog(null,"1+2+3+...+100= "+sum); System.exit(0); //退出程序 } }
  • 88. 在程序中,i是改变条件表达式的循环变量。在开始循环之初,循环变量i=1,sum=0,这时,i<100,满足循环条件,因此可以进入循环体,执行第10行累加语句:sum + i = 1 + 0 = 1 ,将结果再放回到变量sum中,完成第一次循环。接着,循环变量自加1(i++),此时,i=2,再和循环条件比较,……,如此反复,sum = sum + i一直累加,直到运行了100次,i=101,循环条件i<=100不再满足,循环结束。
  • 89. 将程序保存为Example2_14.java。编译程序: javac Example2_14.java 运行程序: java Example2_14 程序的运行结果如图所示:
  • 90. 【例2-15】求10!。计算n! ,由于pn = n! = n * (n – 1) * (n – 2 ) * …… * 2 * 1 = n * (n - 1)! ,因此可以得到递推公式: pn = n * pn-1 , pn-1 = ( n – 1 ) * pn-2 …… p1 = 1 因此,我们可以用一个变量p来存放推算出来的值,当循环变量i从1递增到n时,用循环执行 p = p * i ,每一次p的新值都是原p值的i倍,最后递推求到n!。
  • 91. /*乘法器 */ import javax.swing.JOptionPane; public class Example2_15 { public static void main(String[] args) { int s=1, i=1; for (i=1; i<=10; i++) { p = p * i; } JOptionPane.showMessageDialog(null,"1 * 2 * 3 * ...... * 10 = " + p); System.exit(0); //退出程序 } }
  • 92. for语句条件中的三个表达式可省略,但表达式之间的分号不能省略。若for语句条件中的三个表达式都省略,则为无限循环: for(;;) { …… //无限循环 }
  • 93. 一般,为避免无限循环,上述语句的循环体中应包含能够退出的语句。可以使用break语句强行退出循环,忽略循环体中的任何其他语句和循环的条件测试。在循环中遇到break语句时,循环被终止,程序跳到循环后面的语句继续运行。
  • 94. 【例2-16】无限循环需安排退出循环语句。class Example2_16 { public static void main(String args[]) { int i=1; for(;;) { System.out.println(i); i++; if(i>5) break; } System.out.println("循环已经结束!"); } }
  • 95. 2、while循环语句 Java语言提供了两种while语句:即while语句和do-while语句。这两种循环结构的流程图如图所示。
  • 96. 循环结构while语句格式: while(条件表达式) { 执行语句; }do while语句格式: do { 执行语句; }while(条件表达式); do while特点: 是条件无论是否满足, 循环体至少执行一次。 代表语句:while , do while , for
  • 97. (1)while语句 while语句的基本语法结构为:while(循环条件表达式)  { … 循环体; } 首先,while语句执行条件表达式,它返回一个boolean值(true或者false)。如果条件表达式返回true,则执行花括号中的循环体语句。然后继续测试条件表达式并执行循环体代码,直到条件表达式返回false。
  • 98. 【例2-17】老汉卖西瓜,第一天卖西瓜总数的一半多一个,第二天卖剩下的一半多一个,以后每天都是卖前一天剩下的一半多一个,到第10天只剩下一个。求西瓜总数是多少? 算法分析:设共有x个西瓜,卖一半多一个后,还剩下x/2 - 1个,所以,每天的西瓜数可以用迭代表示: xn = (xn+1 + 1) * 2。且在卖了9天之后(第10天),x = 1。这是可以用循环来处理的迭代问题。
  • 99. /* while循环 */ import javax.swing.JOptionPane; public class Example2_17 { public static void main(String[] args) { int x=1, i=1; while(i<=9) { x=(x+1)*2; i++; } JOptionPane.showMessageDialog(null,"x = " + x); System.exit(0); //退出程序 } }
  • 100. (2)do-while语句 do-while语句的语法结构为: do  { …循环体; } while(循环条件表达式); do-while语句与while语句的区别在于,语句先执行循环中的语句再计算条件表达式,所以do-while语句的循环体至少被执行一次。
  • 101. 【例2-18】 计算 1! + 2! + 3! + …… + 10! import javax.swing.JOptionPane; public class Example2_18 { public static void main(String[] args) { int sum = 0, i = 1, p = 1; do { p = p * i; sum = sum + p; i++; } while(i<=10);
  • 102. JOptionPane.showMessageDialog(null," 1! + 2! + 3! + …… + 10! = " + sum); System.exit(0); //退出程序 } }
  • 103. 3、循环嵌套 循环可以嵌套,在一个循环体内包含另一个完整的循环,叫做循环嵌套。循环嵌套运行时,外循环每执行一次,内层循环要执行一个周期。
  • 104. 【例2-19】应用循环嵌套,编写一个按9行9列排列输出的乘法九九表程序。 算法分析:用双重循环控制乘法九九表按9行9列排列输出,用外循环变量i控制行数,i从1到9取值。内循环变量j控制列数,由于i * j = j * i,故内循环变量j没有必要从1到9取值,只需从1到i取值就够了。外循环变量i每执行一次,内循环变量j执行i 次。
  • 105. /* 循环嵌套应用 */ public class Example2_19 { public static void main(String[] args) { int i,j; for( i = 1;i <= 9;i++) { for(j = 1;j <= i;j++) { System.out.print(i+"x"+j+"="+i*j+"\t"); } System.out.println(); } } }
  • 106. 程序运行结果为: 1x1=1 2x1=2 2x2=4 3x1=3 3x2=6 3x3=9 4x1=4 4x2=8 4x3=12 4x4=16 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
  • 107. public class Example2_19 { public static void main(String[] args) { int i,j; for( i = 1;i <= 9;i++) { for(j=1;j<=10-i;j++) System.out.print("\t"); for(j = 1;j <= i;j++) { System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.println(); System.out.println(); } } }
  • 108. public class Example2_19 { public static void main(String[] args) { int i,j; for( i = 1;i <= 9;i++) { for(j=1;j<=10-i;j++) System.out.print("\t"); for(j = 10-i;j <=9;j++) { System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.println(); System.out.println(); } } }
  • 109. 2.4.7 跳转语句1、 break语句 在循环体中使用break语句强行退出循环时,忽略循环体中的任何其他语句和循环的条件测试,终止整个循环,程序跳到循环后面的语句继续运行。
  • 110. 【例2-20】使用 break语句退出循环。1 /* 使用break语句跳出循环 */ 2 import javax.swing.JOptionPane; 3 4 class Example2_20 5 { 6 public static void main(String args[]) 7 { 8 for(int i=0; i<100; i++) 9  { 10 if(i == 10) break; 11   System.out.println("i= "+i); 12 } 13 System.out.println("循环10次后,跳出循环!"); 14 } 15 }
  • 111. 【程序说明】 循环变量i的取值从0开始,当i=10时,满足第10行if语句的条件,运行break语句,跳出循环,转向执行第13行的语句。(注意,最后一次执行循环体时第11行的语句没被执行)。
  • 112. 程序的运行结果为: i= 0 i= 1 i= 2 i= 3 i= 4 i= 5 i= 6 i= 7 i= 8 i= 9 循环10次后,跳出循环!
  • 113. 2、 continue语句  continue语句用来终止本次循环。其功能是终止当前正在进行的本轮循环,即跳过后面剩余的语句,转而执行循环的第一条语句,计算和判断循环条件,决定是否进入下一轮循环。
  • 114. 【例2-21】 应用continue语句来打印三角形。 1. /* 应用continue语句打印三角形 */ 2. import javax.swing.JOptionPane; 3. class Example2_21 { 4. public static void main(String args[]) { 5. String output=""; 6. for(int i=0; i<5; i++) { 7. for(int j=0; j<5; j++) { 8. if(j > i) { 9.   continue ;  //终止内循环 10. } 11. output= output +"*"+" "; 12. } 13. output=output+"\n"; 14. } 15. JOptionPane.showMessageDialog(null,output); //对话框显示输出内容 16. System.out.println(output);   System.exit(0); //退出系统 17. } 18. }
  • 115. 【例2-22】应用循环语句和switch选择开关语句,设计一个学生成绩管理系统的菜单选择程序。程序运行后,如图所示。
  • 116. 算法设计:(1)显示菜单 使用System.out.println语句将菜单项一项一项在屏幕上显示,界面的边框可以通过多个“-”和“*”拼接起来。 (2)菜单项的选择   菜单应根据用户的选择做出不同的反应,因此需要使用分支结构实现选择选项的功能。根据题意,主菜单含有3个菜单项,属于多分支条件判断,使用带break的switch语句最为合适。
  • 117. (3)重复显示主菜单   为了能够使程序能具有重复选择菜单选项的功能,因此需要使用while循环结构。
  • 118. import java.util.*; class Example2_22 { public static void main(String[] args) { int select; select = 1; String xuehao; String name; int chengji; Scanner sc = new Scanner(System.in); System.out.println(); System.out.println(" ---------------------------------------"); System.out.println(" * *"); System.out.println(" 欢迎进入学生成绩管理系统 "); System.out.println(" * *"); System.out.println(" ---------------------------------------");
  • 119. while(true) { System.out.println( ); System.out.println(" 请选择您的操作:"); System.out.println(" 1.录入学生成绩信息;"); System.out.println(" 2.显示学生成绩信息;"); System.out.println(" 0.退出;"); System.out.println(" 请输入数字选项(0-2): "); select =sc.nextInt(); System.out.println();
  • 120. //判断输入,0退出 if(select>=0 && select<=2) { switch(select) { case 1: System.out.println(" 请输入学号:"); xuehao = sc.next(); System.out.println(); System.out.println(" 请输入学生姓名:"); name = sc.next(); System.out.println(); System.out.println(" 请输入成绩:"); chengji =sc.nextInt(); System.out.println();
  • 121. break; case 2: System.out.println(" 所有学生成绩信息如下:"); System.out.println("您选择了显示所有学生成绩信息。"); System.out.println("学号: "+xuehao+" 姓名: "+name+" 成绩: "+chengji); break; case 0: System.exit(0); } } else { System.out.println("输入错误,请重新输入!"); continue; } } } }