视频课堂:https://edu.csdn.net/course/play/8222
运算符和表达式的概念
运算符总结
运算符和表达式的示例
布尔运算
运算符和表达式的概念 |
---|
运算符表示对操作数所进行的运算。
按操作数的数目来分,可分为如下3类:
一元运算符 (如 ++,--)
二元运算符 (如 +,-,*,/)
三元运算符 (如 ?:)
按照运算符功能来分,基本的运算符主要分为下面几类:
算术运算符 (+,-,*,/,%,++,--)
关系运算符 (>,<,>=,<=,==,!=)
布尔逻辑运算符 (!,&&,||)
位运算符 (>>,<<,>>>,&,|,^,~)
赋值运算符 (=,及其扩展赋运算符如+=)
条件运算符 (?:)
其他 (包括分量运算符、下标运算符[]、实例运算符instanceof、内存分配运算符new、强制类型转换运算符(类型)、方法调用运算符()等)
表达式是变量、常量、运算符和方法调用的序列,它执行指定的计算并返回某个确定的值。表达式的值是属于某个类型的,表达式的类型由运算及参与运算的操作数的类型决定,也可以是复合类型。
运算符总结 |
---|
下面分别介绍常用的基本运算符,通过这些基本的运算符可以表达复杂的逻辑。
一.算术运算符
算术运算符作用于整型或浮点型数据,完成算术运算。
Java 语言有5种基本的算术运算符,如表1所示。
运 算 符 | 含 义 | 例 子 |
---|---|---|
+ | 加 | 3 + 4 |
- | 减 | 5 - 7 |
* | 乘 | 5 * 5 |
/ | 除 | 14 + 7 |
% | 模 | 20 % 7 |
表1 Java算术运算符
Java的算术表达式及其等价式如表2所示。
表 达 式 | 等 价 式 |
---|---|
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x %= y | x = x % y |
x++ | x = x + 1 |
x-- | x = x - 1 |
表2 Java算术表达式与等价式
二.关系运算符
关系运算符用来比较两个值,返回布尔类型的值true或false,关系运算符都是二元运算符,如表3所示。
运 算 符 | 含 义 | 举 例 |
---|---|---|
== | 等于 | x == 3 |
!= | 不等于 | x != 3 |
< | 小于 | x < 3 |
> | 大于 | x > 3 |
<= | 小于等于 | x <= 3 |
>= | 大于等于 | x >= 3 |
表3 Java关系运算符及举例
在Java语言中,任何数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否相等(这与C、C++不同)。关系运算的结果返回true或false,而不是C、C++中的1或0。关系运算符常与布尔逻辑运算符一起使用,作为流控制语句的判断条件,例如:
if( (a>b)&& (b==c) )
三.布尔逻辑运算符
布尔逻辑运算符进行布尔逻辑运算,主要有如表4所示的运算符。
运 算 符 | 含 义 |
---|---|
! | 逻辑非 |
&& | 逻辑与 |
|| | 逻辑或 |
表4 Java布尔逻辑运算符
四.位运算符
位运算符用来对二进制位进行操作,Java中提供了如表5所示的位运算符。
运 算 符 | 含 义 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位取反 |
<< | 按位左移 |
>> | 按位右移 |
>>> | 无符号右移 |
表5 Java位运算符
注意:
(1)在位运算符中,除“~”以外,其余均为二元运算符。
(2)在位运算中操作数只能为整型和字符型数据。
(3)“~”运算符与“-”运算符不同,如~100≠-100。
(4)Java使用补码表示二进制数。
(5)无符号右移时在最高位添零。
运算符和表达式的示例 |
---|
运用Java算术运算符的简单例子
程序源码1:
public class ArithmeticTest{public ArithmeticTest(){ }public static void main(String[] args){short x=6;int y=4;float a=12.5f;float b=7f; System.out.println("x is " +x + " , y is " + y); System.out.println("x + y =" + (x+y)); System.out.println("x - y =" + (x-y)); System.out.println("x / y =" + (x/y)); System.out.println("x % y =" + (x%y)); System.out.println("a is"+a+" , b is "+b); System.out.println("a / b = " +(a/b)); }}编译并运行程序,其输出结果为:x is 6 , y is 4x + y = 10x - y = 2x / y = 1x % y = 2a is 12.5 , b is 7.0a / b = 1.7857143
注意:
(1)Java对加运算符进行了扩展,使它能够进行字符串的连接,例如"abc"+"de",得到串"abcde"。
(2)与C、C++不同,对取模运算%来说,其操作数可以为浮点数,如37.2%10=7.2。
(3)i++与++i的区别为,i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的值为i,而i的值变为i+1。++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1。对i--与--i同样。
程序源码2:
public class ArithmFixTest{public ArithmFixTest(){}public static void main(String[] args){int x=0;int y=0;System.out.println("The test is asfollowing:");System.out.println("x="+x);System.out.println("y="+y);x++;System.out.println("x++="+x);++x;System.out.println("++x="+x);System.out.println();System.out.println("set x=0:");x=0;System.out.println("-------");y=x++;System.out.println("y=x++ :");System.out.println("x is "+x);System.out.println("y is "+y);System.out.println("-------");y=++x;System.out.println("y=++x :");System.out.println("x is "+x);System.out.println("y is "+y);System.out.println("-------");System.out.println();System.out.println("Another test is asfollowing:");x=-7;y=5;System.out.println("-7/5="+x/y);x=-7;y=5;System.out.println("-7%5="+x%y);x=7;y=-5;System.out.println("7%-5="+x%y);double a=5.5;double b=1.0;System.out.println("5.5 % 1.0="+a%b);}}编译并运行程序,其输出结果为:The test is as following:x=0y=0x++=1++x=2set x=0:-------y=x++ :x is 1y is 0-------y=++x :x is 2y is 2-------Another test is as following:-7/5=-1-7%5=-27%-5=25.5 % 1.0=0.5
布尔运算 |
---|
运用Java布尔逻辑运算符的一个简单例子
程序源码:
public class ArithmBool{public ArithmBool(){}public static void main(String[] args){int iVara=20;int iVarb=3;System.out.println("The foolowing is the test:");boolean bVard=(iVara<iVarb);System.out.println("iVara < iVarb = " + bVard);int iVare=3;if((iVare!=0) && ((iVara/iVare)>5))System.out.println("iVara / iVare = "+ (iVara/iVare));int iVarf=0;if( (iVarf!=0) && ( (iVara/iVarf) > 5 ) )System.out.println("iVara / f = " + (iVara/ iVarf));elseSystem.out.println("f = " + iVarf);}}编译并运行程序,其输出结果为:The foolowing is the test:iVara < iVarb = falseiVara / iVare = 6f = 0
条件语句if…else |
---|
if…else语句根据判定条件的真假来执行两种操作中的一种,其一般的格式为:
if( boolean-expression ){ statement1; }else{ statement2; } statement3; 说明:
if(expression1 ){ statement1; }else if( expression2 ){ statement2; }…… else if( expressionM ){ statementM; }else{ statemetN; }
else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用大括号{}来改变配对关系。
例1、比较两个数的大小,并输出较大数。
程序源码:
public class ConditionIf{public ConditionIf(){}public static void main(String[] args){int iVara=10;int iVarb=100;if(iVara > iVarb){System.out.println("The larger is " +iVara);}else{System.out.println("The larger is" + iVarb);}System.out.println("The test is end!");}}编译并运行程序,其输出结果为:Thelarger is 100The test is end!
例2、判断某一年是否为闰年,并输出判断结果。 程序源码:
//判断某一年是否为闰年public class ConditionElse{public ConditionElse(){}public static void main(String[] args){int year=2008;boolean leap=false;if((year % 4) != 0){leap=false;}else if((year % 100) != 0){leap=true;}else if((year % 400) !=0){leap=false;}else{leap=true;}if(leap == true){System.out.println(year + "是闰年.");}else{System.out.println(year + "不是闰年.");}year=2010;if((year % 4) ==0 ){if((year % 100) != 0){leap=true;}else{leap=false;}}else if((year % 400) ==0){leap=true;}else{leap=false;}if(leap == true){System.out.println(year + "是闰年.");}else{System.out.println(year + "不是闰年.");}}}
编译并运行程序,其输出结果为: 2008是闰年. 2010不是闰年.
循环语句的使用 |
---|
循环语句的作用是反复执行一段代码,直到满足循环终止条件时为止,一个循环一般应包括4部分内容。
· 初始化部分:用来设置循环的一些初始条件,如计数器清零等。
· 循环体部分:这是反复循环的一段代码,可以是单一的一条语句,也可以是复合语句。
· 迭代部分:这是在当前循环结束、下一次循环开始执行的语句,常常用来使计数器加1或减1。
· 终止部分:通常是一个布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。
Java中提供的循环语句有:while语句;do…while语句和for语句。
下面分别说明这3种语句的结构。
q While语句
q Do…while语句
q for 语句
q continue 语句
while 语句 |
---|
while语句实现“当型”循环,它的一般格式为:
[initialization] while(termination){ body; [iteration;] }
当布尔表达式(termination)的值为true时,循环执行大括号中的语句。初始化部分和迭代部分是可选的。
while语句首先计算终止条件,当不满足终止条件时,才去执行循环中的语句,这是“当型”循环的特点。例如:
char ch = 'a'; while( (ch != ' ') && (ch != '\t') && (ch !='\n') && (ch != '\r') ){ System.out.println(ch); ch = instream.read(); // 从一个外部输入流中读字符数据 }
do…while 语句 |
---|
do…while语句实现“直到型”循环,它的一般格式为:
[initialization] do{ body; [iteration;] }while(termination);
do…while语句首先执行循环体,然后计算终止条件,若不满足终止条件,则继续循环执行大括号中的语句,直到终止条件满足。
与while语句不同的是,do…while语句的循环体至少执行一次,是“直到型”循环的特点。
for 语句 |
---|
for语句也用来实现“当型”循环,它的一般格式为:
for(initialization; termination;iteration){ body; }
for语句的执行顺序是:首先执行“initalization”初始化语句,然后测试“termination”条件语句;若条件成立,则执行循环体,然后执行“iteration”控制语句,接着再测试条件语句是否成立,如果成立则重复执行以上过程,直至条件不成立时才结束for循环。
例如:
int a[] = newint[10]; for(i=0; i<10; i++){ a[i]=0; }
这段代码把整型数组a中的所有元素都赋成0。
可以在for循环的头部说明变量,而且最后一个表达式可以省略,不过要确定在语句中对变量的值有所改变,例如:
for(int i=0; i<=10;){ i+=1; }
在for循环中,初始化语句、条件语句和控制语句都可以省略,但是其间的分号不能省略,例如:
int n=0; for( ; ; ){ if(i>100){ break; }else{ i++; } }
注意:
for循环中省略条件语句时,在for语句循环体中必须包含转换语句,控制程序在某个条件满足时跳出for循环,否则将形成死循环。
continue 语句 |
---|
continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件判断前,还要先执行迭代语句。
contine语句的格式为:continue;
也可以用continue语句跳转到括号指明的外层循环中,这时的格式为:continue Lable;
例如:
outLable: for( int i=0; i<10; i++){ // 外层循环
for(int j=0; i<20; j++){ // 内层循环
if(j>i){
……
continueoutLable;
}
……
}
……
}
在这个例子中,当满足(j>i)的条件时,程序执行完相应的语句后跳转外层循环,执行外层循环的迭代语句i++,然后开始下一次循环。
举例 |
---|
下例分别用while、do…while和for语句实现1~100的累计求和。
public class LoopShow{public LoopShow(){}public static void main(String[] args){int iTotal=0;int n=1;while(n<=100){iTotal=iTotal+n;n++;}System.out.println("Account using while,the total ="+iTotal);iTotal=0;n=1;do{iTotal=iTotal+n;n++;}while(n<=100);System.out.println("Account using do...while,the total= "+iTotal);iTotal=0;for(n=1;n<=100;n++){iTotal=iTotal+n;}System.out.println("Account using for,the total ="+iTotal);}}
编译并运行程序,其输出结果为:
Account using while,the total = 5050 Account using do...while,the total = 5050 Account using for,the total = 5050
实践问题: |
---|
1. 想想你在计算某些价格是用到了表达式去计算了吗?
2. 如果用程序实现某些方程式,可以吗?尝试看是否能计算出方程式的解。
小结: |
---|
在本章中,我们主要学习了:
u 表达式的概念和应用
u 流程控制语句的使用,注意和c#的语句做对比;
英语词汇: |
---|
英文 全文 中文
While While 当…
For For 循环
Continue Continue 继续
练习项目: |
---|
如果你是一个商店的售货员,你每天卖出的商品需要计算;能不能使用面向对象的思想写个程序来计算,你卖出的每件商品的计算和总销售额及利润的计算;