Java程序设计结构).ppt_第1页
Java程序设计结构).ppt_第2页
Java程序设计结构).ppt_第3页
Java程序设计结构).ppt_第4页
Java程序设计结构).ppt_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 JAVA基本的程序设计结构,一个简单的Java程序 Java基本数据类型 运算符 字符串 控制流程 格式化输出,本章内容,一个简单的Java应用程序,public class FirstSample public static void main(String args ) System.out.print (“欢迎你们来北京,来到“); System.out.print(“普科国际“); System.out.println(“学习!“); System.out.println(“从实用出发,从项目出发是我们的航标!); class SecondSample class ThirdSample ,程序解释,Java对大小写敏感,如果出现了大小写拼写错误,程序无法运行。 关键字public被称作访问修饰符(access modifier),用于控制程序的其它部分对这段代码的访问级别。 关键字class 表明Java 程序中的全部内容都包含在类中,Java是一种纯面向对象的语言。 一个源文件中至多只能有一个public的类声明,其它类的个数不限,如果源文件中包含一个public 类,源文件名必须和它中定义的public的类名相同,且以“java”为扩展名。 正确编译后的源文件,会得到相应的字节码文件,编译器为每个类生成独立的字节码文件,且将字节码文件自动命名为类的名字且以“class”为扩展名。,程序解释,main方法是Java应用程序的入口方法,它有固定的书写格式: public static void main(String args) 在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“”开始,以“”结束, 由于编译器忽略空格,所以花括号风格不受限制。 Java中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行。一条语句可以写成多行代码。 public class ClassName public static void main(String args) program statements; ,注释就是程序员为读者作的说明,是提高程序可读性的一种手段。 在Java中,有3种表示注释的方法 / 单行注释-注释内容从/到本行结尾 /* 单行或多行注释 */ /* 可以用于文档化处理的单行或多行注释 */ 多行注释和文档注释不能嵌套 Java中的注释不会出现在字节码文件中,Java注释,Java标识符,Java 语言中,对各种变量、方法和类等语言要素命名时使用的字符序列称为标识符。标识符用作给变量、类和方法命名。 Java 标识符有如下命名规则: 标识符必须以字母、下划线 、美元符开头。 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。 Java 标识符大小写敏感,且长度无限制。 不可以是Java的关键字。 做的见名知意,Java标识符,标识符用作给变量、类和方法命名 public class ClassNameTest public static void main(String args) String message = “Hello World!”; myPrint(message);/方法调用 private static void myPrint(String s) System.out.println(s); ,Java关键字/保留字,Java 中一些赋以特定的含义,用做专门用途的字符串称为关键字(keyword)。 goto和const虽然从未使用,但也作为Java关键字保留; 所有Java关键字都是小写英文字符串,不同于 C 语言中的 TRUE、FALSE、NULL等。 true,false 虽被用做专门用途,但不是 Java 关键字 Java中一共有50个关键字,如下表所示,Java关键字,Java是一种强类型语言,每个变量都必须声明其类型。 Java的数据类型分为两大类:基本类型(primitive type)和引用类型(reference type) Java中定义了3类8种基本数据类型。 逻辑型boolean 文本型 char 数值型 byte, short, int, long, float, double,Java基本数据类型,数据类型的分类,整型用于表示没有小数部分的数值,它允许是负数。 整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。于此相反,C和C+程序需要针对不同的处理器选择最有效的整型。,整型,Java 语言整型常数的三种表示形式: 十进制整数,如:99, -500, 0。 八进制整数,要求以 0 开头,如:015。 十六进制数,要求 0x 或 0X 开头,如:0x15 。 Java语言的整型常数默认为int型,声明long型常量可以后加 l 或 L ,如: int a = 600; long b = 55555555555l; /必须加l否则会出错 Java中没有无符号类型,整型,浮点类型用于表示有小数部分的数值。 float类型又被称作单精度类型,有7位有效数字,在很多情况下,float类型的精度很难满足需求。 double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。,浮点型,Java 浮点类型常量有两种表示形式 十进制数形式,例如: 3.14 314.0 0.314 科学记数法形式,如 3.14e2 3.14E2 3.14E-2 float类型的数值有一个后缀F/f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D/d,以明确其为double类型,如: double a = 3.1415926; double b = 3.1415926d; float f = 3.1415926f; /必须加f否则会出错,浮点型,单引号用来表示字符常量。例如A是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。 char 类型用来表示在Unicode编码表中的字符。 Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;ASCII码占1个字节,可允许有128个字符,是Unicode编码表中前128个字符。 char eChar = a; char cChar =中; Unicode具有从0到65535之间的编码,他们通常用从u0000到uFFFF之间的十六进制值来表示(前缀为u表示Unicode) char c = u0061;,字符型char,Java 语言中还允许使用转义字符 来将其后的字符转变为其它的含义, char c2 = n; /代表换行符,特殊字符,boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。 boolean 类型用来判断逻辑条件,一般用于程序流程控制 。 boolean flag ; flag = ; if( flag ) / true分支 else / false分支 ,boolean类型,Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。 变量在使用前必须对其声明,只有在变量声明以后,才能为其分配相应长度的存储单元,声明格式为: type varName =value,varName=value; 注意事项: 每个变量都有类型,类型可以是基本类型,也可以是引用类型。 变量名必须是合法的标识符。 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。,Java 变量,变量声明举例: double salary ; boolean flag; long earthPopulation ; int age ; 可以在一行中声明多个变量: int i ,j; / both are integers 不提倡这种风格,逐一声明每一个变量可以提高程序可读性。 可以将变量的声明和初始化放在同一行中,例如: int age = 18; float e = 2.718281828f; 变量按被声明的位置可划分为: 局部变量:方法或语句块内部定义的变量 实例变量:方法外部、类的内部定义的变量,Java 变量,方法或语句块内部定义的变量 在使用前必须先声明和初始化(赋初值) public class VariableTest public void correctLocalV() int x; int y = 10; x = 20; int z = x + y; char ch; ch = c; public void incorrectLocalV() int i; int j = i+5 ; / 编译出错,为什么? 因为局部变量必须赋予一定的值之后才能够运用 ,Java 局部变量,public class LocalVariableTest public static void main(String arg) boolean flag = true; / 声明boolean型变量并赋值 char c1, c2; / 声明char型变量 c1 = u0041; / 为char型变量赋值 c2 = B; / 为char型变量赋值 int x; / 声明int型变量 x = 9; /为int型变量赋值 int y = x; / 声明并初始化int型变量 float f = 3.15f; / 声明float型变量并赋值 double d = 3.1415926; /声明double型变量并赋值 ,Java 局部变量,课堂练习_1,运行前页的例子程序,体会各种基本数据类型的声明及初始化,自己输出变量内容。 输出语句采用下述形式: System.out.println(“x=” + x); /其中x是变量名 使用char型的两种常量值为char型变量赋值并输出。 练习使用转义字符,在java中,使用关键字final来表示常量 关键字final表示可以对变量赋一次值,且它的值一旦设定,便不可改变。 习惯上常量名都用大写字母。,Final 常量,public class Constants public static void main(String args) final double PI = 3.14; / PI = 3.15; /error double r = 4; double area = PI * r * r; double circle = 2 * PI * r; System.out.println(“area = “ + area); System.out.println(“circle = “ + circle); ,Final 常量,一般约定 Java 标识符的选取因注意“见名知意” 表示常量的标识符全部大写,比如: final double PI = 3.14; 表示类名的标识符是以大写字母开头的名词,如果名字由多个单词组成,每个单词的第一个字母都应该大写。比如:HelloWorld 表示方法和变量的标识符用小写字母开始,后面的描述性词以大写开始,比如: getName() 这种在一个单词间使用大写字母的方式称作“camel case”驼峰匹配,即:大小写混合,命名规范,Java 语言支持如下运算符: 算术运算符: +,-,*,/,%, 赋值运算符 = 递增,递减运算符 +,- 关系运算符: ,=, 条件运算符 ? : 扩展赋值运算符: +=,-=,*=,/=,运算符,对数值变量进行加1,减1是最常见的操作,所以在Java中提供了自增自减运算符+,-。n+将变量n的值当前值加1;n-将n的值减1. 这些运算符改变了变量的值,所以它的操作数不能是数值 例如: 5+ /error 这两个运算符有两种形式 前缀形式:+(-)在前时先运算再取值。 后缀形式:+(-)在后时先取值再运算。,递加/递减运算符,public class OperatorTest public static void main(String arg) int m = 10; int n = 20; int i = (n+); System.out.print(“i=“ + i); System.out.println(“n=“ + n); i = (+n); System.out.print(“i=“ + i); System.out.println(“ n=“ + n); i = (m-); System.out.print(“i=“ + i); System.out.println(“ m=“ + m); i = (-m); System.out.print(“i=“ + i); System.out.println(“ m=“ + m); ,递加/递减运算符,比较运算,计算结果“true”或“false” 大于 “op1 op2” 大于等于 = “op1 = op2” 小于 、=、 (=、!=) 关系运算符低于算术运算符,关系运算符,public class RelationalTest public static void main(String args) int w = 9; int x = 6; boolean y = w = w * 2-x * 3; boolean c = b a; System.out.println(“w x = “ + y); System.out.println(“z = “+ z); System.out.println(“c = “ + c); ,关系运算符,逻辑运算符功能 !- 逻辑非 & - 逻辑与 | - 逻辑或 - 逻辑异或 &- 短路与 | - 短路或 逻辑运算符功能说明:,逻辑运算符,public class LogicalTest public static void main(String args) boolean a = true; boolean b = false; boolean c; c = a ,逻辑运算符,&和|是按照“短路”方式求值的,如果第一个操作数已经能够确定值,则不计算第二个操作数。 expression1 & expression2 expression1为false,那么结果不可能为真,因此第二个表达式不计算,这种方式可以避免一些错误的发生,比如: x != 0 & 1/x 10 /避免了除零错误 expression1 | expression2 当expression1为true时,结果自动为true,不必计算expression2,逻辑运算符,public class LogicalTest2 public static void main(String args) int i = 1; int j = 2; boolean flag = (i 1) ,逻辑运算符,条件运算符是java语言中唯一的三元运算符 语法格式:条件 ? op1 : op2 若条件为真,则计算op1的值,否则计算op2的值 例: z = a 0 ? a : -a; z = a b ? a : b;,条件运算符,位运算符包括: - 取反 & - 按位与 | - 按位或 - 按位异或 位运算符功能说明:,&,|,位运算符,:右移运算符(有符号的右移运算,说明:负数以原码方式进行移动)。将左操作数向右移动,移位个数由右操作数决定,移位后的空位补零。(注:当负数右移时,负号位不参与运算;其它位在右移时,若移出去的是1,则最后结果要加1;若移出去的是0,则最后结果不需要加1)。 :无符号移位运算符(说明:负数以补码方式进行运算)。移位后用0填充前面的空位。(注:负数转换成补码进行无符号的右移,则最高位的1不再表示负号,它表示数 而参与运算) 注意:对移位运算符右侧的参数需要进行模32的操作, 例如: 1 35 等价与 1 3,移位运算符,public class BitTest public static void main(String args) int i = 10; int j = i 1; System.out.println(“j=“ + j ); int k = (i ,移位运算符,/负数右移运算测试示例: public class TestMoveBit public static void main(String args) int x=-5; /* “” 为有符号的右移,它是以原码方式参加向右移位。 * 负号位的1不参与移位;在移位中当移出去的是数字1时, * 则最后结果应加1;当移出去的是数字0,则最后结果不加1 */ int y=x1; /* “” 为无符号的右移,它是以补码方式参加向右移位。 * 左边移出的空位被0;不论右边移出去的是0还是1,则最后结果 * 均不加1。 */ int z=(x1); System.out.println(“x=“+x+“ y=“+y+“ z=“+z); int s=0; for(int i=2; i=30; i+) s+=(int)(Math.pow(2, i); s=s+1; System.out.println(“s=“+s); boolean b1= s=z; System.out.println(“s=z “+(b1? “相等“:“不相等“); ,移位运算符,/* * int x=-5; * int y=x1; * * 原码: 10000000 00000000 00000000 00000101 * 右移1位后: 1X000000 00000000 00000000 00000010 * + 1 * - * 1X000000 00000000 00000000 00000011 * 结果为: -3 * * int x=-5; * int y=x1; * * 原码: 10000000 00000000 00000000 00000101 * 反码: 11111111 11111111 11111111 11111010 * 补码: 11111111 11111111 11111111 11111011 /说明:补码即为无符号数,即是正数 * 右移1位后: X1111111 11111111 11111111 11111101 * 空位补0后: 01111111 11111111 11111111 11111101 * - * 空位补0后: 01111111 11111111 11111111 11111101 * 结果为: * */,分析结果如下:,赋值运算符“=”是最常用的一种运算符。它将等号右边的表达式的值赋给左边的变量。 可以在赋值语句中采用简化的格式书写二元运算符, x += 4; 等价与 x = x + 4; Java中“扩展”的赋值运算符:+=,-=,*=,/=,%=,=,&=,|=,=,= 当“=”两侧的数据不一致时,需要用到类型转换,有两种方式。 自动类型转换: 系统自动完成 强制类型转换: 手工完成,赋值运算符,自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。 特例:可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围 short b = 12; /合法 short b = 1234567; /非法,自动类型转换,public class ImplicitCastTest public static void main(String args) byte b = 1; / 如果b = 128; ? short s = b; / byte implicit to short int i = b; / byte implicit to int float f = b; / byte implicit to float long l = b; / byte implicit to long double d = b; / byte implicit to double char c = a; i = c; / char implicit to int System.out.println(i); / 会输出什么呢? f = i; / int implicit to float l = i; / int implicit to long d = i; / int implicit to double f = l; / long implicit to float d = l; / long implicit to double d = f; / float implicit to double ,自动类型转换,强制类型转换(Cast):强制类型转换,又被称为造型,用于显式的转换一个数值的类型.在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。 强制类型转换的语法格式:“(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型。 例如:double x = 3.14; int nx = (int)x; /值为3 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。 例如: int x = 300; byte bx = (byte)x; /值为44 不能在布尔类型和任何数值类型之间做强制类型转换。 如果需要把布尔类型转换成一个数字该怎么办呢?,强制类型转换,class CastingTest public static void main(String args) int a = 257; byte b = (byte)a; System.out.println(“a=“ + a); System.out.println(“b=“ + b); 257 00000000 00000000 00000001 00000001 1 00000001,强制类型转换的示例,多种类型的数据混合运算时,不同的数据类型之间是无法运算,当一个表达式中出现不同的数据类型时,在运算前,编译器会将操作数转换为相同的类型 只要两个操纵数中有一个是double类型,会将另一个转换成double类型 否则,只要两个操纵数中有一个是float类型的,另一个会转化float类型 否则,只要两个操纵数中有一个是long类型的,另一个将转化成long类型 否则,两个操作数都将转换成int类型,自动类型转换,public class Conversion public static void main(String arg) int i = 77; int j = 33; double d = (i + j) * 3.14; float f = (float) (i + j * 3.14); int k = (int) (i + j) * 3.14f); byte b = 1; short s = 2; byte bb = (byte) (b + s); d = b + s; i = 300; b = (byte) i; System.out.println(b); f = 3.14f; long l1 = 2; long l2 = 123456789000l; f = l1 + l2 + f; long l = (long) f; ,类型转换,课堂练习_2,找出下面程序中的编译错误或可能产生计算溢出的部分并说明如何修改。 public static void main(String arg) int i1 = 1, i2, i3 = 99L; i1 = i1 / 10; i1 =i1 / 10.0; i2 = i2+; long l1 = 123, l2 = 555555555555; long l3 = l1 + 5; float f1 = 0.5, f2 = 5; float f3 = f1 + f2; float f4 = f1 * f2 * 0.1; double d1 = 3.14e20, d2 = 3.14; double d3 = d1 * d2 + 2; byte b1 = 77, b2 = 66, b3 = 128; byte b = b1 - b2; char c1 = a, c2 = 125; char c = c1 + c2; short s1 = 12, s2 = 65536; short s3 = b1 + s1; /说明: 最好先不要在工具中编译它,而是人为逻辑推断一下,将修改方案写在纸上。,表达式是符合一定语法规则的运算符和操作数组成的序列,其目的是用来说明一个计算过程。 3.14 * r * r (a + ) * c + d a & b | c a += b +=c 表达式的类型和值 对表达式中操作数进行运算得到的结果称为表达式的值。 表达式的值的数据类型即为表达式的类型 。 表达式的运算顺序 同其它程序设计语言一样,使用圆括号来指示运算的执行顺序,在不使用圆括号的情况下: 应按照运算符的优先级从高到低的顺序进行。 优先级相同的运算符按照事先约定的结合方向进行。,表达式,表达式中运算符的优先级,表达式 + 分号“;”表达式语句 x = 25; y += a*b+c; C=a+b; 只有分号空语句:空语句的含义 i = 5; ; ; 符合语法规则(程序设计的初始阶段) 以分号作为语句的结束,一个语句可以跨多行,语句(Statement),Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的。 Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。 String e = “” ; / an empty string String greeting = “Hello World”;,字符串,Java允许使用符号“+“把两个字符串连接起来 String s1 = “Hello”;String s2 = “World!”; String s = s1 + s2; /HelloWorld! 符号“+”把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式。 当“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接 int age = 18; String s = “age is“ + age; /s赋值为age is 18 这种特性通常被用在输出语句中: System.out.println(“age is” + age);,串连接,String类中的substring方法可以从一个大的字符串中提取一个子串,例如: String greeting = “Hello”; String s = greeting.substring(0,3) 将创建一个包含字符”Hel”的字符串 Java以特定的方式计算字符串的字符:字符串中的第一个字符的位置为0. substring方法的第一个参数的进行拷贝的起始位置,第二个参数是不进行拷贝的起始位置,这种方式的优点是容易计算字串的长度 s.substring(a,b)总是有b-a个字符,子串,length方法用来求得字符串的长度,例如: String greeting = “Hello”; int n = greeting.length(); / is 5 s.charAt(n)方法将返回s中在位置n的Unicode字符(n在0到s.length()-1之间),例如: char last = greeting.charAt(4); /is o String类对象称作不可变的字符串,这样的话编译器可以安排共享的字符串,同时也意味着String类中不提供这样的方法,它可以改变已存在的字符串中的单个字符。,编辑串,equals方法用来检测两个字符串内容是否相等。如果字符串s和t内容相等,则s.equals(t)返回true,否则返回false. s和t既可以是字符串变量,也可以是字符串常数,例如: “Hello”.equals(t); 要测试两个字符串除了大小写区别外是否是相等的,需要使用equalsIgnoreCase方法,忽略大小写,例如: “Hello”.equalsIgnoreCase(“hellO”);/true 判断字符串是否相等不要使用“=”,测试字符串是否相等,public class TestStringEquals public static void main(String args) String g1=“Hello World!“; String g2=“Hello World!“; boolean b1=g1.equals(g2); System.out.println(“tg1.equals(g2) 是否相等:“ + (b1 ? “相等“ : “不相等“) ); boolean b2=(g1=g2); System.out.println(“tg1=g2 是否相等:“ + (b2 ? “相等“ : “不相等“) ); System.out.println(“=“); String s1=new String(“Hello World!“); String s2=new String(“Hello World!“); boolean b3=s1.equals(s2); System.out.println(“ts1.equals(s2) 是否相等:“ + (b3 ? “相等“ : “不相等“) ); boolean b4=(s1=s2); System.out.println(“ts1=s2 是否相等:“ + (b4 ? “相等“ : “不相等“); /* g1.equals(g2) 是否相等:相等 * g1=g2 是否相等:相等 *= * s1.equals(s2) 是否相等:相等 * s1=s2 是否相等:不相等 * 问: 为什么会产生以上不同的结果,你能说明其原因吗? * (或者 画内存变化图来说明) */,思考以下程序,char charAt(int index) 返回字符串中第index个字符。 boolean equals(String other) 如果字符串与other相等,返回true boolean equalsIgnoreCase(String other) 如果字符串与other相等(忽略大小写),则返回true int indexOf(String str) int indexOf(String str,int fromIndex) 返回与str匹配的第一个字串的开始位置,该位置从0或fromIndex开始计算,如果原始串中不存在str,返回-1. int length() 返回字符串的长度。 String replace(char oldChar,char newChar) 返回一个新串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的 。,String类的常用方法,public class StringTest1 public static void main(String args) String s1 = “core java“; String s2 = “Core Java“; System.out.println(s1.charAt(4); System.out.println(s2.length(); System.out.println(s1.equals(s2); System.out.println(s1.equalsIgnoreCase(s2); System.out.println(s1.indexOf(“java“); System.out.println(s1.indexOf(“apple“); String s = s1.replace( , ,String类应用举例,boolean startsWith(String prefix) 如果字符串以prefix开始,则返回true boolean endsWith(String prefix) 如果字符串以prefix结尾,则返回true String substring(int beginIndex) String substring(int beginIndex,int endIndex) 返回一个新字符串,该串包含从原始字符串beginIndex到串尾或endIndex-1的所以字符 String toLowerCase() 返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母 String toUpperCase() 返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母 String trim() 返回一个新字符串,该串删除了原始字符串头部和尾部的空格,String类的常用方法,public class StringTest2 public static void main(String args) String s = “; String s1 = “How are you?“; System.out.println(s1.startsWith(“How“); System.out.println(s1.endsWith(“you“); s = s1.substring(4); System.out.println(s); s = s1.substring(4,7); System.out.println(s); s = s1.toLowerCase(); System.out.println(s); s= s1.toUpperCase(); System.out.println(s); String s2 = “ How old are you! “ ; s = s2.trim(); System.out.println(s); System.out.println(s2); /? ,String类应用举例,阅读联机API文档,从结构化程序设计角度出发,程序有三种结构: 顺序结构 选择结构 循环结构 这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过这三种结构来表达。 上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。,Java程序的流程控制,先执行A, 再执行B.,顺序结构,存在某条件P, 若P为真,则执行A, 否则执行B。,选择结构,循环结构有两种: 当型:当P条件成立时(T),反复执行A,直到P为“假”时才停止循环. 直到型:先执行A, 再判断P,若为T,再执行A,如此反复,直到P为F.,循环结构,块(有时叫做复合语句),是用花括号括起的任意数量的简单java语句。块确定了局部变量的作用域。 块中的程序代码,作为一个整体,是要被一起执行的。 块可以被嵌套在另一个块呢。 不能在两个嵌套的块内声明同名的变量。 public static void main(String args) int n; int k; int n; /error cant redefine n in inner block /k is only defined up to here ,语句块,形式1: if (布尔表达式) 语句; 条件必须用括号括起来,且条件必须产生一个布尔结果。 “语句”要么是用分号结尾的一个简单语句,要么是一个复合语句 意义:if语句对条件表达式进行一次测试,若测试为真,则执行下面的语句,否则跳过该语句,if 语句 具有3种形式,所有条件语句都利用条件表达式的真或假来决定执行流程。,条件语句,public class IfTest1 public static void main(String args) double i = 6 * Math.random(); double j = 6 * Math.random(); double k = 6 * Math.random(); int count = (int) (i + j + k); if(count 15) System.out.println(“今天手气不错“); if(count = 10 ,条件语句,在Math这个类中,包含了各种各样的数学函数,以帮助我们进行数学计算。 sqrt方法用于计算一个数的平方根,返回值为double类型,类如: double x = 4; double y = Math.sqrt(x); System.out.println(y) /y = 2 pow方法用于幂运算,例如: double y = Math.pow(5,3) 就是y的值设置为5的3次方 random方法返回一个大于等于0,小于1的double值 该类还提供了两个用于表示和e 常量的近似值 Math.PI Math.E,Math 类,public class MathTest public static void main(String args) double x = 4; double y = Math.sqrt(x); System.out.println(y) ; y = Math.pow(x,3) ; System.out.println(y) ; /计算半径为4的圆的周长 double p = 2*Math.PI*x; System.out.println(p); ,Math 类应用示例,形式2 if (布尔表达式) 语句块1; else 语句块2; 当条件表达式为真时,执行语 句块1,否则,执行语句块2。 也就是else部分。,条件语句,public class IfTest2 public static void main(String args) double r = 4 * Math.random(); double area = Math.PI * Math.pow(r, 2); double circle = 2 * Math.PI * r; System.out.println(“半径为: “ + r); System.out.println(“面积为: “ + area); System.out.println(“周长为: “ + circle); if(area = circle) System.out.println(“面积大于等于周长“); else System.out.println(“周长大于面积“); ,条件语句,形式3: if(布尔表达式1) 语句块1; else if(布尔表达式2) 语句块2; else if(布尔表达式n) 语句块n; else 语句块n+1; 逐条if语句进行判断 条件匹配,进入语句体 否则对if语句继续匹配,条件语句,public class IfTest3 public static void main(String args) int age = (int) (100 * Math.random(); System.out.print(“年龄是“ + age + “, 属于“); if (age 15) System.out.println(“儿童, 喜欢玩!“); else if (age 25) System.out.println(“青年, 要学习!“); else if (age 45) System.out.println(“中年, 要工作!“); else if (age 65) System.out.println(“中老年, 要补钙!“); else if (age 85) System.out.println(“老年, 多运动!“); else System.out.println(“老寿星, 古来稀!“); ,条件语句,if语句的嵌套:在上述形式的if语句中, 又可以是if语句。 一般形式: if (表达式1) if (表达式2) 语句1 else 语句2 else if (表达式3) 语句3 else 语句4 若没有配对符,则else与最近的尚未配对的if语句配对,例如语句:if(x = 0) if(x=0) sign = 0; else sign=-1; 中,else 属于第二个if 为了提高程序的可读性,一定要明确地写上配对符。,内嵌if语句,内嵌if语句,条件语句,课堂练习_3,仿照例程IfTest3,实现如下功能: 随机生成一个100以内的成绩,当成绩在8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论