目录
1.复合语句
与C语言及其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。复合语句由开括号“ { ” 开始,闭括号 “ } ”结束。
复合语句中的每个语句都是从上到下被执行,复合语句以整个块为单位,能够用在任何一个单独语句可以使用的地方,并且在复合语句中还可以嵌套复合语句。
例如,下面这段代码,在主方法中定义了复合语句块,复合语句块中还可以包含另一语句块。
在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。例如,在上述代码中,如果在复合语句外使用变量y、z、b将会出现错误,儿变量x可在整个方法体中使用。
2.条件语句
2.1 if条件语句
if条件语句是一个重要的编程语句,用于告诉程序在某个条件成立的情况下执行某段语句,而在另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”如果该表达式返回的结果为true,则执行其后的语句:如果为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if…else语句和if…else if多分支语句。
1.简单的if条件语句
语法如下:
if(布尔表达式){
语句序列
}
简单的if条件语句的执行过程如图所示。
例1,判断手机号码是否存在。
创建Takephone类,模拟拨打电话场景,如果电话号码不是84972266,则提示拨打的号码不存在。
代码:
public class Takephone { //创建类
public static void main(String[] args) {//主方法
int phoneNumber = 123456789;//创建变量,保存电话号码
if (phoneNumber!=84972266) {//如果此电话号码不是84972266
System.out.println("对不起,您拨打的电话不存在!");//提示号码不存在
}
}
}
运行结果:
流程图:
2.if…else语句
if…else语句是条件语句中最常用的一种形式,它会针对某种条件有选择地做出处理。通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”。语法如下:
if(条件表达式){
语句序列1
}else{
语句序列2
}
例2,使用if…else语句校验密码
在项目中创建Login类,在主方法中定义变量,并通过if…else语句判断变量地值来决定输出结果。
代码:
public class Login {//创建类
public static void main(String[] args) {//主方法
int password = 987654321;//密码值
if(123456789 == password) {//如果密码是123456789
System.out.println("密码正确,欢迎登录");//密码正确提示
}else {//否则
System.out.println("密码错误,拒绝登录");//密码错误提示
}
}
}
运行结果:
流程图:
3.if…else if多分支语句
if…else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件,就进行某种处理,否则如果满足另一种条件则执行另一种处理。”语法如下:
if(条件表达式1){
语句序列1
}else if(条件表达式2){
语句序列2
}
…
else if(条件表达式n){
语句序列n
}
例3,使用if…else if语句实现饭店座位分配
创建Restaurant类,声明整型变量count表示用餐人数,根据人数安排客人到4人桌、8人桌或包厢。
代码:
public final class Restaurant {//创建类
public static void main(String[] args) {//主方法
System.out.println("欢迎光临,请问有多少人用餐?");//输入问题提示
int count = 9;//用餐人数
System.out.println("回答:"+count+"人");//输出回答
if(count <=4) {//如果人数小于四人
System.out.println("客人请到大厅4人桌用餐");//请到4人桌
}else if(count>4 && count<=8) {//如果人数在4~8人
System.out.println("客人请到大厅8人桌用餐");//请到8人桌
}else if(count>8 && count<=16) {//如果人数在8~16人
System.out.println("客人请到楼上包厢用餐");//请到楼上包厢
}else {//当以上条件都不成立,执行该语句块
System.out.println("抱歉,我们店暂时没有这么大的包厢");//输出信息
}
}
}
运行结果:
流程图:
2.2 switch多分支语句
在编程中,一个常见的问题就是检测变量是否符合某个条件,如果不符合,再用另一个值来检测。
例如,使用if语句对考试成绩进行评估,关键代码如下:
if(grade =='A'){
Systeem.out.println("真棒");
}
if(gread =='B'){
System.out.println("做得不错");
}
在Java中,可以用switch语句将动作组织起来,以一个简单明了得方式来实现“多选一”得选择。语法如下:
switch(表达式){
case 常量值1:
语句块1
[break;]
…
case 常量值n;
语句块n
[break;]
default:
语句块n+1;
[break;]
}
switch语句中表达式的值必须是整型、字符型、字符串类型或枚举类型,常量值1~n的数据类型必须与表达式的值的类型相同。
switch语句首先计算表达式的值,如果表达式的计算结果和某个case后面的常量值相同,则执行该case语句后的若干个语句直到遇到break语句为止。此时,如果该case语句中没有break语句,将继续执行后面case中的若干个语句,直到遇到break语句为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句为可选的,如果它不存在,且switch语句中的表达式的值不与任何case的常量值相同,switch语句则不做任何处理。
例4,使用switch语句为考试分数分级
创建Grade类,使用Scanner类在控制台输入分数,然后switch多分支语句判断输入的分数属于哪类成绩。10分和9分属于优,8分属于良,7分和6分属于中,5分、4分、3分、2分、1分以及0分均属于差。
代码:
import java.util.Scanner;//引入Scanner类
public class Grade {//创建类
public static void main(String[] args) {//主方法
Scanner sc = new Scanner(System.in);//创建扫描器,接收控制台输入内容
System.out.println("请输入成绩");//输出字符串
int grade = sc.nextInt();//获取控制台输入的数字
switch(grade) {//使用switch判断数字
case 10://如果等于10,则继续执行下一行代码
case 9://如果等于9
System.out.println("成绩为优");//输出“成绩优先”
break;//结束判断
case 8://如果等于8
System.out.println("成绩为良");//输出“成绩为良”
break;//结束判断
case 7://如果等于7,则继续执行下一行代码
case 6://如果等于6
System.out.println("成绩为中");//输出“成绩为中”
break;//结束判断
case 5://如果等于5,则继续执行下一行代码
case 4://如果等于4,则继续执行下一行代码
case 3://如果等于3,则继续执行下一行代码
case 2://如果等于2,则继续执行下一行代码
case 1://如果等于1,则继续执行下一行代码
case 0://如果等于0
System.out.println("成绩为差");//输出“成绩为差”
break;//结束判断
default://如果不符合以上任何一个结果
System.out.println("成绩无效");//输出“成绩无效”
}
sc.close();//关闭扫描器
}
}
运行结果:
流程图:
3.循环语句
3.1 while 循环语句
while 语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句。语法如下:
while(条件表达式){
语句序列
}
例5,计算1~1000的相加结果
创建GetSum类,在主方法中通过while循环计算1~1000相加的和并输出。
代码:
public class GetSum {//创建类
public static void main(String[] args) {//主方法
int x = 1;//从1开始
int sum = 0;//相加的结果
while(x<=1000) {//循环1000次
sum = sum+x;//sum与之前计算的和相加
x++;//每次循环后x的值+1
}
System.out.println("sum="+sum);//输出最终的相加结果
}
}
运行结果:
流程图:
3.2 do…while循环语句
do…while循环语句与while循环语句类似,它们之间的区别是while语句为先判断是否成立再执行循环体,而do…while循环语句则先执行一次循环后,再判断条件是否成立。也就是说,do…while循环语句“ { } ”中的程序至少要被执行一次。语法如下:
do{
语句序列
}while(条件表达式);
例6,使用do…while语句进行用户登录验证
创建LoginService类,首先提示用户输入6位密码,然后使用Scanner扫描器获取用户输入的密码,最后进入do…while循环进行判断,如果用户输入的密码不是“931567”,则让用户反复输入,直到输入正确密码为止。
代码:
import java.util.Scanner;//引入scanner类
public final class LoginService {//创建类
public static void main(String[] args) {//主方法
Scanner sc =new Scanner(System.in);//创建扫描器,获取控制台输入的值
int password;//保存用户输入的密码
do {
System.out.println("请输入6位数字密码:");//输入提示
password = sc.nextInt();//将用户在控制台输入的密码记录下来
}while(931567 != password);//如果用户输入的密码不是931567则进行执行循环
System.out.println("登陆成功");//提示循环已结束
sc.close();//关闭扫描器
}
}
运行结果:
流程图:
3.3 for循环语句
for循环是Java程序设计中最有用的循环之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。for循环有两种语句,一种是传统的for语句,一种是foreach语句。
1、for语句
for的传统语句有三个表达式,语法如下:
for(表达式1;表达式2;表达式3){
语句序列
}
表达式1:初始化表达式,负责完成变量的初始化。
表达式2:循环条件表达式,值Boolean型的表达式,指定循环条件。等同于while循环里的表达式。
表达式3:每次循环结束后执行的语句,通常用来改变循环条件。
例7,使用for循环计算2~100所有偶数之和
创建Circulate类,编写程序,使用for循环语句计算2~100所有偶数的和并输出。
代码:
public class Circulate {//创建类
public static void main(String[] args) {//主方法
int sum = 0;//偶数相加后的结果
for(int i =2;i<=100;i+=2) {
sum = sum + i;//指定循环条件及循环体
}
System.out.println("2到100之间所有偶数之和为:"+sum);//将相加后的结果输出
}
}
运行结果:
流程图:
2.foreach语句
foreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以改写为for语句版本。foreach语句并不是一个关键字,习惯上将这种特殊的for语句格式称为foreach语句。语法如下:
for(元素类型x:遍历对象obj){
引用了x的Java语句;
}
例8,使用foreach语句遍历整个数组
创建类Repetition,在主方法中定义一堆数组,并用foreach语句遍历该数组。
代码:
public class Repetition {//创建类
public static void main(String[] args) {//主方法
int arr[] = {5,13,96};//一维整型数组
System.out.println("一维数组中的元素分别为:");
//x的类型与arr元素的类型相同。for循环依此取出arr中的值并赋值给x
for(int x:arr) {
System.out.println(x);//输出遍历出的元素值
}
}
}
运行结果:
流程图:
4.循环控制
4.1 break语句
使用break语句可以跳出switch结构。在循环结构中,同样也可以用break语句跳出当前循环体,从而中断当前循环。
例9,输出1~20出现的第一个偶数
创建BreakTest类,循环输出1~20的偶数值,在遇到第一个偶数时,使用break语句结束循环。
代码:
public class BreakTest {//创建类
public static void main(String[] args) {//主方法
for(int i=1;i<20;i++) {
if(i %2 ==0) {//如果i是偶数
System.out.println(i);//输出i的值
break;//结束循环
}
}
System.out.println("--end--");//结束时输入一行文字
}
}
运行结果:
流程图:
如果想让break跳出外层循环,Java提供了“标签”的功能,语法如下:
标签名:循环体{
break标签名;
}
标签名:任意标识符。
循环体:任意循环语句。
break标签名:break跳出指定的循环体,此循环体的标签名必须与break的标签名一致。带有标签的break可以指定跳出循环,这个循环可以是内层循环,也可以是外层循环。
例10,使用标签让break结束外层循环
创建BreakInsideNested类,在该类中写两层for循环,第一层for语句循环3次,第二层for语句循环5此。当第二层for循环至第四次时,强行使用break中断循环。输出程序执行时外层循环和内层循环各循环了多少次。
代码:
public class BreakInsideNested {//创建类
public static void main(String[] args) {//主方法
for(int i =1;i<=3;i++) {//外层循环
for(int j=1;j<=5;j++) {//内层循环
if(j==4) {//内层循环至第四次就结束
break;
}
System.out.println("i="+i+"j="+j);
}
}
}
}
运行结果:
流程图:
4.2 continue语句
continue语句是针对break语句的补充。continue不是立即跳出循环体,而是跳过本次循环,回到循环的条件测试部分,重新开始执行循环。在for循环语句中遇到continue后,首先执行循环的增量部分,然后进行条件测试。在while和do…while循环中,continue语句使控制直接回到条件测试部分。
例11,输出1~20的奇数
创建ContinueTeat类,编写一个for循环从1循环至20,如果当前循环的次数为偶数,则使用continue语句跳过循环。
代码:
public final class ContinueTeat {//创建类
public static void main(String[] args) {//主方法
for(int i=1;i<=20;i++) {
if(i%2==0) {//如果i是偶数
continue;//跳出下一循环
}
System.out.println(i);//输出i的值
}
}
}
运行结果:
流程图:
课堂作业
for循环内部嵌套一个while循环
流程:
1
for{(2;3;4)
5
while(条件){
6
}
7
}
8
流程图:
do...while循环内部嵌套一个for循环
流程:
1
do{
2
for(3;4;5){
6
}
7
}while (条件)
8
流程图: