第五章
运算符、类型转换以及
条件判断结构
学习目标:
?掌握算术、逻辑和布尔运算符
?自动类型转换和强制类型转换
? if条件判断语句
? switch结构
算术运算符:
运算符优先级别
? 优先级规则:
() ?乘除(从左到右) ?加减(从左到右)
? 复杂的表达式:
C=25-5*4/2-10+4;
从左到右的规则求值,结果是,34
按照优先级规则求值,结果是,9
? 用()来表述想要的结构
升级和类型转换
? 赋值和表达式可能引起计算的数据类型与
保存结果的存储位置之间的不匹配。
? 右边的数据类型小于左边的数据类型:
byte num1=53;
byte num2=47;
long num3;
num3=num1*num2;
? 右边的数据类型大于左边的数据类型:
int num1=53;
int num2=47;
byte num3;
num3=num1+num2;
? 右边的数据类型和数据大于左边的数据类型:
int num1=53;
int num2=47;
byte num3;
num3=num1*num2;
注意:
? Java是强类型语言,因此,在进行 赋值操作 时要 对类型进行检查 ;
? 当将 占位数少 的类型赋值给 占位数多 的类型时,Java自动使用 隐式
类型转换 (升级 );
? 当将 占位数多 的类型赋值给 占位数少 的类型时,需要由用户使用 显
式的强制类型转换 ;
其一般形式为:
( 类型名 )( 表达式 )
类型转换
? 短类型 ?长类型,自动升级
? 长类型 ?短类型, 强制转换
自动升级规则
1,(byte或 short) op int → int
2,(byte或 short或 int) op long → long
3,(byte或 short或 int或 long) op float → float
4,(byte或 short或 int或 long或 float) op double → double
5,char op int → int
其中,箭头左边表示参与运算的数据类型
op为运算符 (如加、减、乘等 )
右边表示运算结果的数据类型。
如,3+4.5,因为 4.5是 float型,所以 3先被转换为 float型,然
后再于 4.5相加,其结果也为 float型。
例, 自动升级实例
public class Promotion
{
public static void main( String args[ ] )
{
byte b = 10;
char c = 'a';
int i = 90;
float f = 3.5f;
double d = 1.234;
float f1;
f1 = f * b;
int i1;
i1 = c+i;
double d1;
d1 = f1 / i1 – d;
}
}
查看结果,Test.java
查看结果,Promotion.java
强制类型转换
? 类型转换可缩小值的范围
例,int a ;
long b ;
b = a ;
a = ( int ) b ; /*把 long型变量 b强制转换为 int型 */
int x=365;
byte y=(byte)x; /*把 int型变量 i强制转换为 byte型 */
? // 强制转换后丢失一部分数据,使得 y的值为 100。
一般使用强制类型转换可能会导致数值溢出或精度的下降,应尽量避免。
? 浮点类型转换为整数类型将使所有小数
部分丢失。
public class Age
{
public static void main(String args[ ])
{
int ageYears;
int ageDays;
long ageSeconds;
ageYears=Integer.parseInt(args[0]);
ageDays=ageYears*365;
ageSeconds=(ageYears*365*24L*60*60);
System.out.print(“You are”+ageDays+”days old.”);
System.out.print(“You are”+ageSeconds+”seconds old.”);
}
}
查看结果,Age.java
逻辑运算符:
布尔运算符:
JAVA的流程控制语句
? 结构化程序设计的三种基本控制语句
– 顺序
– 分支
– 循环
按语句 书写的先后顺序 执行
在若干路径中 有条件地择一 执行
当某条件成立时,反复执行 一段代码
条件语句 if-else
if(boolean-expression)
statement1;
[else statement2;]
注意:
1,boolean-expression必须返回为布尔型数据的表达式,
不能用整型数值代替;
2、每个单一语句后边都要有分号;
3、如果 statement1,statement2为多条语句,那么要用
{ }将它们括起来。
4,else总是与最近的 if配合
If 结构的基本部分
If 条件 A
If 条件 B{
1 ………
}
else {
2 ………
}
例:比较两个数的大小,并按照从大到小的
顺序输出到屏幕上。
public class CompareTwo
{
public static void main(String args[])
{
double d1=23.4;
double d2= 56.9;
if(d1>=d2)
System.out.println(d1+”>=“+d2);
else
System.out.println(d2+”>=“+d1);
}
}
查看结果,Coffee.java
多重 If 结构
查看结果,Coffee.java
测试 String之间的等同性
? 使用 ==比较 String在内存中的引用 是否相等
? 要测试两个字符串之间是否具有等同性用 equals
if语句中内嵌的语句 1或语句 2又是 if语句的情况称为 if 语句的嵌套。如:
if(布尔表达式 1)
{
语句 1
}
else if (布尔表达式 2)
{
语句 2
}
……
else if (布尔表达式 m)
{
语句 m
}
else
{
语句 n
}
if 语句的嵌套
if(x==1)
{if(y==1)
aa=1;
else aa=2;
}
if(x==1)
{
if(y== 1) aa=1;
}
else aa=2;
程序从上往下依次判断表达式的条
件,一旦某个条件满足,就执行相关的
语句,然后就不再判断其余的条件,直
接转到 if语句的后续语句执行。
如果需要,可以通过使用 { }来改变配
对关系。
? 使用 if的程序
switch语句
switch 语句根据表达式的结果来执行多个操作中的一个,
它的语法形式如下:
switch ( 表达式 )
{
case 判断值 1,语句块 1;
[break; ]
case判断值 2,语句块 2;
[break; ]
…
case判断值 n,语句块 n;
[break; ]
[default,缺省处理语句;
break; ]
}
1,要注意 表达式 必须是符合
byte,char,short,int类型的表达式,而不能
使用浮点类型或 long类型,也不能为一个字
符串;
2,将 表达式的值 依次与每个 case子句中的 判
断值 相比较。如果匹配成功,则执行该
case子句中常量值后的语句,直到遇到
break语句为止;
3,case子句中 判断值 的类型必须与 表达式 的类
型相容,且每个 case子句中 判断值 的值必
须是不同的;
4,default子句是可选的,当 表达式 的值 与任一
case中的 判断值 都不匹配时,就执行
default后的语句。如果表达式的值与任一
case中的 判断值 都不匹配且没有 default子
句,则程序不执行任何操作,直接跳出
switch 语句,进入后续程序段的执行。
switch语句的流程如图所示:
表达式
break
语句 1
break
语句 2
break
语句 n
break
缺省处理语句
后续语句
判断值 1 判断值 2 判断值 n default…….
switch语句的注意点
5,break语句 用来在执行完一个 case 分支后, 使程序跳出 switch 语句, 执
行 switch 语句的后续语句 。 因此一般情况下, 在每个 case 分支后, 要用
break来终止后面的 case分支语句的执行;
6,在一些特殊的情况下, 例如多个不同的 case值要执行一组相同的操作,
可以写成如下形式:
…
case判断值 n:
case判断值 n+1,语句
[break; ]
…
7.case分支中包括多个执行语句时, 可以不用花括号, {}”括起;
8.通过 if-else语句可以实现 switch 语句所有的功能 。 但通常使用 switch语句
更简练, 且可读性强, 程序的执行效率也高;
9,if-else 语句可以基于一个范围内的值或一个条件来进行不同的操作,但
switch 语句中的每个 case 子句都必须对应一个单值。
查看结果,SwitchTest.java
查看结果,SwitchDaysInMonth.java
例:用 switch语句实现学生成绩的百分制到等级制的转换。
class SwitchDemo{
public static void main(String[ ] args) {
int testscore=88;
char grade;
switch (testscore/10) // 两个整型数相除的结果还是整型
case 10,//此处没有使用 break
case 9:
grade='A'; //值为 10和 9时的操作是相同的
break;
case 8:
grade='B';
break;
case 7:
grade='C';
break;
case 6:
grade='D';
break;
default:
grade='F';
break;
}
System.out.println("grade is:"+grade);
}
}
运算符、类型转换以及
条件判断结构
学习目标:
?掌握算术、逻辑和布尔运算符
?自动类型转换和强制类型转换
? if条件判断语句
? switch结构
算术运算符:
运算符优先级别
? 优先级规则:
() ?乘除(从左到右) ?加减(从左到右)
? 复杂的表达式:
C=25-5*4/2-10+4;
从左到右的规则求值,结果是,34
按照优先级规则求值,结果是,9
? 用()来表述想要的结构
升级和类型转换
? 赋值和表达式可能引起计算的数据类型与
保存结果的存储位置之间的不匹配。
? 右边的数据类型小于左边的数据类型:
byte num1=53;
byte num2=47;
long num3;
num3=num1*num2;
? 右边的数据类型大于左边的数据类型:
int num1=53;
int num2=47;
byte num3;
num3=num1+num2;
? 右边的数据类型和数据大于左边的数据类型:
int num1=53;
int num2=47;
byte num3;
num3=num1*num2;
注意:
? Java是强类型语言,因此,在进行 赋值操作 时要 对类型进行检查 ;
? 当将 占位数少 的类型赋值给 占位数多 的类型时,Java自动使用 隐式
类型转换 (升级 );
? 当将 占位数多 的类型赋值给 占位数少 的类型时,需要由用户使用 显
式的强制类型转换 ;
其一般形式为:
( 类型名 )( 表达式 )
类型转换
? 短类型 ?长类型,自动升级
? 长类型 ?短类型, 强制转换
自动升级规则
1,(byte或 short) op int → int
2,(byte或 short或 int) op long → long
3,(byte或 short或 int或 long) op float → float
4,(byte或 short或 int或 long或 float) op double → double
5,char op int → int
其中,箭头左边表示参与运算的数据类型
op为运算符 (如加、减、乘等 )
右边表示运算结果的数据类型。
如,3+4.5,因为 4.5是 float型,所以 3先被转换为 float型,然
后再于 4.5相加,其结果也为 float型。
例, 自动升级实例
public class Promotion
{
public static void main( String args[ ] )
{
byte b = 10;
char c = 'a';
int i = 90;
float f = 3.5f;
double d = 1.234;
float f1;
f1 = f * b;
int i1;
i1 = c+i;
double d1;
d1 = f1 / i1 – d;
}
}
查看结果,Test.java
查看结果,Promotion.java
强制类型转换
? 类型转换可缩小值的范围
例,int a ;
long b ;
b = a ;
a = ( int ) b ; /*把 long型变量 b强制转换为 int型 */
int x=365;
byte y=(byte)x; /*把 int型变量 i强制转换为 byte型 */
? // 强制转换后丢失一部分数据,使得 y的值为 100。
一般使用强制类型转换可能会导致数值溢出或精度的下降,应尽量避免。
? 浮点类型转换为整数类型将使所有小数
部分丢失。
public class Age
{
public static void main(String args[ ])
{
int ageYears;
int ageDays;
long ageSeconds;
ageYears=Integer.parseInt(args[0]);
ageDays=ageYears*365;
ageSeconds=(ageYears*365*24L*60*60);
System.out.print(“You are”+ageDays+”days old.”);
System.out.print(“You are”+ageSeconds+”seconds old.”);
}
}
查看结果,Age.java
逻辑运算符:
布尔运算符:
JAVA的流程控制语句
? 结构化程序设计的三种基本控制语句
– 顺序
– 分支
– 循环
按语句 书写的先后顺序 执行
在若干路径中 有条件地择一 执行
当某条件成立时,反复执行 一段代码
条件语句 if-else
if(boolean-expression)
statement1;
[else statement2;]
注意:
1,boolean-expression必须返回为布尔型数据的表达式,
不能用整型数值代替;
2、每个单一语句后边都要有分号;
3、如果 statement1,statement2为多条语句,那么要用
{ }将它们括起来。
4,else总是与最近的 if配合
If 结构的基本部分
If 条件 A
If 条件 B{
1 ………
}
else {
2 ………
}
例:比较两个数的大小,并按照从大到小的
顺序输出到屏幕上。
public class CompareTwo
{
public static void main(String args[])
{
double d1=23.4;
double d2= 56.9;
if(d1>=d2)
System.out.println(d1+”>=“+d2);
else
System.out.println(d2+”>=“+d1);
}
}
查看结果,Coffee.java
多重 If 结构
查看结果,Coffee.java
测试 String之间的等同性
? 使用 ==比较 String在内存中的引用 是否相等
? 要测试两个字符串之间是否具有等同性用 equals
if语句中内嵌的语句 1或语句 2又是 if语句的情况称为 if 语句的嵌套。如:
if(布尔表达式 1)
{
语句 1
}
else if (布尔表达式 2)
{
语句 2
}
……
else if (布尔表达式 m)
{
语句 m
}
else
{
语句 n
}
if 语句的嵌套
if(x==1)
{if(y==1)
aa=1;
else aa=2;
}
if(x==1)
{
if(y== 1) aa=1;
}
else aa=2;
程序从上往下依次判断表达式的条
件,一旦某个条件满足,就执行相关的
语句,然后就不再判断其余的条件,直
接转到 if语句的后续语句执行。
如果需要,可以通过使用 { }来改变配
对关系。
? 使用 if的程序
switch语句
switch 语句根据表达式的结果来执行多个操作中的一个,
它的语法形式如下:
switch ( 表达式 )
{
case 判断值 1,语句块 1;
[break; ]
case判断值 2,语句块 2;
[break; ]
…
case判断值 n,语句块 n;
[break; ]
[default,缺省处理语句;
break; ]
}
1,要注意 表达式 必须是符合
byte,char,short,int类型的表达式,而不能
使用浮点类型或 long类型,也不能为一个字
符串;
2,将 表达式的值 依次与每个 case子句中的 判
断值 相比较。如果匹配成功,则执行该
case子句中常量值后的语句,直到遇到
break语句为止;
3,case子句中 判断值 的类型必须与 表达式 的类
型相容,且每个 case子句中 判断值 的值必
须是不同的;
4,default子句是可选的,当 表达式 的值 与任一
case中的 判断值 都不匹配时,就执行
default后的语句。如果表达式的值与任一
case中的 判断值 都不匹配且没有 default子
句,则程序不执行任何操作,直接跳出
switch 语句,进入后续程序段的执行。
switch语句的流程如图所示:
表达式
break
语句 1
break
语句 2
break
语句 n
break
缺省处理语句
后续语句
判断值 1 判断值 2 判断值 n default…….
switch语句的注意点
5,break语句 用来在执行完一个 case 分支后, 使程序跳出 switch 语句, 执
行 switch 语句的后续语句 。 因此一般情况下, 在每个 case 分支后, 要用
break来终止后面的 case分支语句的执行;
6,在一些特殊的情况下, 例如多个不同的 case值要执行一组相同的操作,
可以写成如下形式:
…
case判断值 n:
case判断值 n+1,语句
[break; ]
…
7.case分支中包括多个执行语句时, 可以不用花括号, {}”括起;
8.通过 if-else语句可以实现 switch 语句所有的功能 。 但通常使用 switch语句
更简练, 且可读性强, 程序的执行效率也高;
9,if-else 语句可以基于一个范围内的值或一个条件来进行不同的操作,但
switch 语句中的每个 case 子句都必须对应一个单值。
查看结果,SwitchTest.java
查看结果,SwitchDaysInMonth.java
例:用 switch语句实现学生成绩的百分制到等级制的转换。
class SwitchDemo{
public static void main(String[ ] args) {
int testscore=88;
char grade;
switch (testscore/10) // 两个整型数相除的结果还是整型
case 10,//此处没有使用 break
case 9:
grade='A'; //值为 10和 9时的操作是相同的
break;
case 8:
grade='B';
break;
case 7:
grade='C';
break;
case 6:
grade='D';
break;
default:
grade='F';
break;
}
System.out.println("grade is:"+grade);
}
}