第三章
主要内容
运算符与表达式
-
Java提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。
-
Java语言中的绝大多数运算符和C语言相同,基本语句,如条件分支语句、循环语句等也和C语言类似,因此,本章就主要知识点给予简单的介绍 。
-
算术运算符
-
加减运算符:+ , -
- 加减运算符是二目运算符;
- 加减运算符的结合方向是从左到右;
- 加减运算符的操作元是整型或浮点型数据,
- 加减运算符的优先级是4级。
-
乘、除和求余运算符:* , / , %
- 以上运算符是二目运算符,
- 结合方向是从左到右,
- 乘、除和求余运算符的操作元是整型或浮点型数据。
- 运算符的优先级是3级。
-
算术表达式
- 用算术符号和括号连接起来的符合java语法规则的式子,称为算术表达式。
如: x+2*y-30+3*(y+5)
-
自增、自减运算符:++,–
- 单目运算符,
- 可以放在操作元之前,也可以放在操作元之后。
- 操作元必须是一个整型或浮点型变量。
- 作用是使变量的值增1或减1,
如: ++x(--x)表示在使用x之前,先使x的值增(减)1。 x++(x--)表示在使用x之后,使x的值增(减)1。 例如: int f=2; int m=2; int x=(f*m++)+m; //x=7; int y=(f*++m)+m; //y=9;
-
java中数据类型的精度从
低
到高
排列的顺序是:- byte
- short
- char
- int
- long
- float
- double
-
Java在计算算术表达式的值时,使用下列计算精度规则:
- 如果表达式中有双精度浮点数(double型数据),则按双精度进行运算.
- 如果表达式中最高精度是单精度浮点数(float型数据),则按单精度进行运算.
- 如果表达式中最高精度是long型整数,则按long精度进行运算.
- 如果表达式中最高精度低于int型整数,则按int精度进行运算.
- char型数据和整型数据运算结果的精度是int。
-
-
关系运算符: > , < , >= , <= , == , !=
-
特点:
- 关系运算符是二目运算符,
- 用来比较两个值的关系
-
关系运算符的运算结果是boolean型,当运算符对应的关系成立时,运算结果是true,否则是false。
-
运算规则:
- 在关系运算符中,当操作数是基本数据类型时,比较的是数据内容;
- 在关系运算符中,当操作数是引用类型时,比较的是引用对象的引用值,判断是否是同一对象,而没有比较对象的内容。
-
-
逻辑运算符包括: &&、||、!
-
&&、|| 为二目运算符,实现逻辑与、逻辑或;
-
!为单目运算符,实现逻辑非。
-
规则:
- 逻辑运算符的操作元必须是boolean型数据,逻
- 辑运算符可以用来连接关系表达式
-
&&,||也称短路运算符
- 当前面的表达式op1的值为false时,&&运算符在运算时就不再去计算op2表达式的值;
- 当op1为true时,||运算符就不再计算op2的值。(
-
-
赋值运算符:=
-
赋值运算符是二目运算符,
-
左面的操作元必须是变量,不能是常量或表达式。
-
赋值运算符的优先级较低,是14级,
-
结合方向右到左。
-
赋值表达式的值就是
=
左面变量的值。 -
注意:不要将赋值运算符
=
与等号逻辑运算符==
混淆。
-
-
位运算符:是指对两个整型数据按照对应的位进行运算,结果为新的整型数据。
- 按位
与
运算&
- 双目运算符。
- 运算法则是:如果a,b两个数据对应位都是1,则c的该位是1,否则是0。
- 按位
或
运算|
- 双目运算符。
- 运算法则是:如果a,b两个数据对应位都是0,则c的该位是0,否则是1。
- 按位
非
运算~
- 是单目运算符。
- 运算法则是:如果a对应位都是0,则c的该位是1,否则是1。
- 按位异
或
运算^
- 双目运算符。
- 运算法则是:如果a,b两个数据对应位相同,则c的该位是0,否则是1。
- 按位
-
instanceof 运算符
- 二目运算符,
- 左面的操作元是一个对象;右面是一个类。
- 当左面的对象是右面的类或子类创建的对象时,该运算符运算的结果是true ,否则是false。
-
Java的表达式就是用运算符连接起来的符合Java规则的式子。
-
运算符的优先级决定了表达式中运算执行的先后顺序。
-
在编写程序时尽量使用括号()运算符号来实现想要的运算次序,以免产生难以阅读或含糊不清的计算顺序。
-
运算符的结合性决定了具有相同级别运算符的先后顺序 。
-
语句概述
- Java里的语句可分为以下六类
- 方法调用语句:
如: System.out.println(" Hello");
- 表达式语句:表示式尾加上分号。
比如赋值语句: x=23;
- 复合语句:可以用{ }把一些语句括起来构成复合语句,
如: { z=123+x; System.out.println("How are you"); }
- 空语句:一个分号也是一条语句,称做空语句。
- 控制语句:控制语句分为条件分支语句、开关语句和循环语句。
- package语句和 import语句:它们和类、对象有关
- 方法调用语句:
- Java里的语句可分为以下六类
-
顺序结构
-
if
条件分支语句-
条件分支语句按着语法格式可细分为三种形式:
if
语句if-else
语句if-else if- ……- else if -else
语句
-
if语句
-
是单条件分支语句,即根据一个条件来控制程序执行的流程
-
if 语句的语法格式:
if(布尔表达式){ 若干语句 }
package com.lxt; import java.util.Scanner; public class Demo{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("请输入一个内容"); String s = scanner.nextLine(); if(s.equals("HELLO")){ System.ot.println(s); } scanner.close(); } }
-
注:
- 表达式的值必须是
boolean
型的; - 不能用
0
代表false
,用1
代表true
;
- 表达式的值必须是
-
-
if-else
语句-
是双条件分支语句,即根据一个条件来控制程序执行的流程。
-
if-else 语句的语法格式:
if(表达式) { 若干语句 } else { 若干语句 }
-
-
if-elseif
语句- 是多条件分支语句,即根据多个条件来控制程序执行的流程。
- if-else if-else语句的语法格式:
if(表达式) { 若干语句 } else if(表达式) { 若干语句 } … … else { 若干语句 }
-
-
switch
开关语句-
switch
语句是单条件多分支的开关语句 , -
它的一般格式定义如下(其中break语句是可选的):
switch(表达式) { case 常量值1: 若干个语句 break; case 常量值2: 若干个语句 break; ... case 常量值n: 若干个语句 break; default: 若干语句 }
-
说明:
- 表达式的值必须是:
byte
,short
,Int
,char
,不能是String
或者long
型的;(与int
兼容类型) - 这里面必须要有
break
语句,否则,就会匹配显示从匹配的常量值到最后。 default
语句放的位置是任意的。- 检查时
case 常量
必须与switch表达式
可用的类型相同。
- 表达式的值必须是:
-
-
循环语句
-
for
for
语句的语法格式:for (表达式1; 表达式2; 表达式3) { 若干语句 }
for
语句的执行规则是:- 计算
表达式1
,完成必要的初始化工作。 - 判断
表达式2
的值,若表达式2
的值为true
,则执行循环体,否则进行结束for
语句的执行。 - 执行循环体,然后计算“表达式3”,以便改变循环条件,再次判断
表达式2
的值 - 结束
for
语句的执行。
- 计算
- 打印九九乘法表
package com.lxt.struct; import java.util.*; public class Demo{ public static void main(String[] args){ for(int i = 1;i < 10;i++){ for(int j = 1;j <= i;j++){ System.out.print(i+"*"+j+"="+(i*j)); } System.out.print(); } } }
-
while
while
语句的语法格式:while (表达式) { 若干语句 }
while
语句的执行规则是:- 计算表达式的值,如果该值是
true
时,就进行(2),否则执行(3)。 - 执行循环体,再进行(1)。
- 结束
while
语句的执行。
- 计算表达式的值,如果该值是
-
do-while
do-while
语句的语法格式:do { 若干语句 } while(表达式);
do- while
语句的执行规则是:- 执行循环体,再进行(2)。
- 计算表达式的值,如果该值是
true
时,就进行(1),否则执行(3)。 - 结束
while
语句的执行。
-
-
break
和continue
语句break
和continue
语句是用关键词break
或continue
加上分号构成的语句。- 在循环体中可以使用
break
语句和continue
语句。 - 如果在某次循环中执行了
break
语句,那么整个循环语句就结束。 - 如果在某次循环中执行了
continue
语句,那么本次循环就结束,即不再执行本次循环中循环体中continue
语句后面的语句,而转入进行下一次循环。
-
数组与
for
语句JDK1.5
后,对for
语句的功能给予扩充、增强,以便更好地遍历数组。语法格式如下:for(声明循环变量:数组的名字) { …… }
- 其中,声明的循环变量的类型必须和数组的类型相同。
- 这种形式的
for
语句类似自然语言中的for each
语句, - 为了便于理解上述
for
语句,可以将这种形式的for
语句翻译成对于循环变量依次取数组的每一个元素的值。
-
的打印三角形
package com.lxt.struct; import java.util.*; public class Demo{ public static void main(String[] args){ for(int i = 0;i < 5;i++){ for(int j = 5;j >= i;j-- ){ System.out.print(" "); } for(int k = i;k >= 0;k--){ System.out.print("*"); } for(int k = i;k > 0;k--){ System.out.print("*"); } System.out.println(); } } }
重点和难点
重点:运算符、表达式和各种控制语句
难点:各种控制语句用法
习题
-
问答题
- 关系运算符的运算结果是 boolean 类型
- if语句中的条件表达式不可以为int类型
- while语句中的条件表达式的值是 boolean 类型
- switch语句中default选项不是必须的
- while语句的循环体中,执行break语句的效果是 结束while语句的执行
- 可以用for语句代替while语句的作用
-
选择题
- A 数据类型的判断
- C
- C。
-
阅读程序
- 你,苹,甜
- Jeep好好
- x=-5,y=-1
-
编程序题
public class Xiti1 {
public static void main(String args[]) {
double sum=0,a=1;int i=1;
while(i<=20) {
sum=sum+a;
i++;
a=a*i;
}
System.out.println(“sum=”+sum);
}
}
-
public class Xiti2 {
public static void main(String args[]) {
int i,j;for(j=2;j<=100;j++) {
for(i=2;i<=j/2;i++) {
if(j%i==0)break;
}
if(i>j/2) {
System.out.print(" "+j);}
}
}
}
class Xiti3 {
public static void main(String args[]) {
double sum=0,a=1,i=1;do { sum=sum+a;
i++;
a=(1.0/i)*a;
}
while(i<=20);
System.out.println(“使用do-while循环计算的sum=”+sum);
for(sum=0,i=1,a=1;i<=20;i++) {
a=a*(1.0/i);sum=sum+a;
}
System.out.println(“使用for循环计算的sum=”+sum);
}
}
4.
public class Xiti4 {
public static void main(String args[]) {
int sum=0,i,j;for(i=1;i<=1000;i++) {
for(j=1,sum=0;j<i;j++) {
if(i%j==0)sum=sum+j;
}
if(sum==i)
System.out.println(“完数:”+i);
}
}
}
5.
public class Xiti5 {
public static void main(String args[]) {
int m=8,item=m,i=1;long sum=0;
for(i=1,sum=0,item=m;i<=10;i++) {
sum=sum+item;item=item*10+m;
}
System.out.println(sum);
}
}
6.
public class Xiti6 {
public static void main(String args[]) {
int n=1;long sum=0;
while(true) {
sum=sum+n;n++;
if(sum>=8888)
break;
}
System.out.println(“满足条件的最大整数:”+(n-1));
}
}