4.JAVA流程控制

本文介绍了Java编程中的流程控制语句,包括复合语句、条件语句(如if...else,switch)和循环语句(如while,do...while,for),以及Scanner类在获取用户输入中的应用。详细阐述了各种语句的语法和使用场景,并给出了实例代码。
摘要由CSDN通过智能技术生成

目录

1.1复合语句

1.2 条件语句

 1.2.1 if条件语句

1.简单的if条件语句

1.2.2. if...else语句

java.util.Scanner包

1.2.3.do...while语句

1.2.4.循环语句

1.3.1.switch语句

1.4.循环控制--break关键字--continue关键字

1.4.1break:它能终端当前的循环,不管后面有什么代码;

1.4.2.continue关键字:它能跳过后面的代码,直接执行下一次的循环


前言:

  做任何事情都要遵循一定的原则。例如,到图书馆去借书,就必须要有借书证,并且借书证不能过期,这两个条件缺一不可。程序设计也是如此,需要有流程控制语句实现与用户的交流,并根据用户的输入决定程序要“做什么”“怎么做”等。

  流程控制对任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段。如果没有流程控制语句,整个程序将按照线性的顺序来执行,不能根据用户的输入决定执行的序列。

  流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块

其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:

  • 顺序结构 :程序从上到下逐行地执行,中间没有任何判断和跳转

1.1复合语句

  在定义一个类或者方法时,类体就是以“{”与“}”作为开始与结束的标记,方法体也是以“{”与“}”作为标记。复合语句中的每个语句都是从上到下被执行。复合语句以整个块为单位,能够用在任何一个单独语句可以使用的地方,并且在复合语句中还可以嵌套复合语句。

例如:下面这段代码,在主方法中定义了复合语句块,复合语句块中还可以包含另一复合语句块

public class Compound{
    public static void main(String[] args);
        int x = 20;
        {
            int y = 40;
            System.out.println(y);
            int z = 245;
            boolean b;
            {
                b = y > z;
                System.out.println(b);
            }
        }
        String word = "hello java";

        System.out.println(word);
   }
}

  在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。例如,在上述代码中,如果在复合语句外使用变量y、z、b将会出现错误,而变量x可在整个方法体中使用。 

1.2 条件语句

 1.2.1 if条件语句

  使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“不二表达式”。如果该表达式返回的结果为true,则执行其后的语句;如果为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if...else语句和if...else if多分支语句。

1.简单的if条件语句

语法如下:

if(布尔表达式){
    语句序列
}
  • 布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。
  • 语句序列:可选参数。可以是一条或多条语句,当表达式的值为true时执行这些语句。若语句序列中仅有一条语句,则可以省略条件语句中的“{}”。

如果语句序列中只有一条语句,则可以采用以下写法:

int a = 100;
    if(a == 100)
    System.out.print("a的值是100");

误区警示:

  • 虽然if条件语句中的语句序列只有一条语句时,省略“{ }”并无语法错误,但为了增强程序的可读性,最好不要省略。
  • 条件语句最后的语句序列省略时,可以保留外面的大括号。也可以省略大括号,然后再末尾添加“;”。如下所示两种情况都是正确的:
boolean b = false;
if(b);
boolean b = false;
if(b){}

//if实例:判断手机号码是否存在

public class TakePhone{
    public static void main(String[] args) {
        int phoneNumber = 123456789;    //创建变量,保存电话号码
        if(phoneNumber != 84973366){    //如果此电话号码不是84973366
            System.out.println("对不起,您拨打的号码不存在!");   //提示号码不存在
        }
    }
}

//编译结果

对不起,您拨打的号码不存在!

1.2.2. if...else语句

分支结构:根据条件,选择性地执行某段代码。有if…else和switch-case两种分支语句。

分支结构:if-else使用说明

  • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量

  • 语句块只有一条执行语句时,一对0可以省略,但建议保留

  • if-else语句结构,根据需要可以嵌套使用

  • 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略

  • 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓,当多个条件是“包含”关系时,“小上大下/子上父下”

//实例
package com.wkcto;

public class AgeTest {
    public static void main(String[] args) {
        System.out.println("-----------if-else语句应用举例--------------");
        int age = 75;
        if(age>0){
            System.out.println("不可能!");
        }else if(age>250){
            System.out.println("是个妖怪!");
        }else{
            System.out.println("人家芳龄: " + age + ",马马虎虎啦!");
        }
    }
}

//编译结果
-----------if-else语句应用举例--------------
不可能!

Process finished with exit code 0


//if else基本语法
/*
第一种:
if(条件表达式){
    执行表达式
}

第二种:二选一
if(条件表达式){
    执行表达式1
}else{
    执行表达式2
}

第三种:多选一
if(条件表达式){
    执行表达式1
}else if(条件表达式){
    执行表达式2
}else if(条件表达式){
    执行表达式3
}
...
else

 */

package com.wkcto;

import java.sql.SQLOutput;

public class IfTest {
    public static void main(String[] ages){
        System.out.println("--------实例1-------");
        int heartBeats = 179;
        if(heartBeats < 60 || heartBeats > 100){
            System.out.println("需要做进一步检查");
        }
        System.out.println("检查结束");

        System.out.println("--------实例2-------");
        int age = 23;
        if(age <18){
            System.out.println("可看动画片");
        }else{
            System.out.println("可看成人电影");
        }

        System.out.println("--------实例3-------");
        if(age < 0 ){
            System.out.println("您输入的数据非法");
        }else if(age < 18){
            System.out.println("青少年时期");
        }else if(age < 35){
            System.out.println("青壮年时期");
        }else if(age < 60 ){
            System.out.println("中年时期");
        }else if(age < 120){
            System.out.println("老年时期");
        }else{
            System.out.println("成仙~");
        }
    }
}

//编译结果
--------实例1-------
需要做进一步检查
检查结束
--------实例2-------
可看成人电影
--------实例3-------
青壮年时期

Process finished with exit code 0

循环语句就是在满足一定条件的情况下反复执行某一个操作的语句。java中提供了3种常用的循环语句,分别 while循环语句、do...while循环语句和for循环语句。

java.util.Scanner包

基本知识:

  util,utiliy的缩写,意即,工具性的包。主要包含集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类。

  Scanner,扫描仪,使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

  java.util.Scanner,Java5的新特性,可以简化文本扫描,主要用于控制台输入,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。

* new Scanner的时候,控制台就会一直等待输入,

* 使用回车键后,输入的内容将传送给Scanner

* 如果要获取输入的内容,就调用Scanner的nextLine()方法

* Scanner:用于获取键盘录入的数据。(基本数据类型,字符串数据)

* public String nextLine():获取键盘录入的字符串数据
 

/*
如何键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化
3.调用Scanner类的相关方法,来获取指定类型的变量
注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException,导致程序终止。
 */

//实例测试
import java.util.Scanner;  //导入包
public class ScannerTest {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);  //创建扫描器,接收控制台输入内容
    //    int num = scan.nextInt();   //获取控制台输入数字
    //    System.out.println(num);    //输出字符串
        System.out.println("请输入你的姓名:");
        String name = scan.next();
        System.out.println(name);

        System.out.println("请输入你的年龄:");
        int age = scan.nextInt();
        System.out.println(age);

        System.out.println("请输入你的体重:");
        double weight = scan.nextDouble();
        System.out.println(weight);

        System.out.println("你是否喜欢我?(true/false)");
        boolean isLove = scan.nextBoolean();
        System.out.println(isLove);

        //对于char型的获取,scanner没有提供相关的方法。只能获取一个字符串
        System.out.println("请输入你的性别:(男/女)");
        String gender = scan.next(); //"男"
        char genderChar = gender.charAt(0); //获取索引为0位置上的字符
        System.out.println(genderChar);

    }
}

//编译结果
请输入你的姓名:
某酷菌
某酷菌
请输入你的年龄:
24
24
请输入你的体重:
117
117.0
你是否喜欢我?(true/false)
true
true
请输入你的性别:(男/女)
男
男

Process finished with exit code 0



//if...else if 和util.Scanner包结合使用实例测试

/*
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
        如果:
        成绩为100分时,奖励一辆BMW;
        成绩为(80,99]时,奖励一台iphone xs max;
        当成绩为[60,80]时,奖励一个 iPad;
        其它时,什么奖励也没有。
        请从键盘输入岳小鹏的期末成绩,并加以判断
说明:
1.else结构结构是可选的。
2.针对于条件表达式:
    >如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句生命在上面还是下面,无所谓;
    >如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面;
    >如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的则没机会执行。
    例如:
            if(score == 100){
            System.out.println("奖励一辆BMW");
        }else if(score >= 60 ){             //范围大的写上面,包含了80;下面80的语句则无意义,所以在写语句时要思考好到底要怎么设计;
            System.out.println("奖励一个 iPad");
        }else if(score > 80 ){
            System.out.println("奖励一台iphone xs max");

        }else{
            System.out.println("什么奖励也没有");
*/



import java.util.Scanner;
public class ScannerTest1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in); //实例化,创建扫描器,接收控制台输入内容
        System.out.println("请输入某酷菌期末成绩:(0-100)");
        int score = scan.nextInt(); //获取控制台输入数字为int型

        if(score == 100){
            System.out.println("奖励一辆BMW");
        }else if(score > 80 && score <= 99){
            System.out.println("奖励一台iphone xs max");
        }else if(score >= 60 && score <= 80){
            System.out.println("奖励一个 iPad");
        }else{
            System.out.println("什么奖励也没有");
        }
    }
}


//编译结果
请输入某酷菌期末成绩:(0-100)
100
奖励一辆BMW

Process finished with exit code 0

1.2.3.do...while语句

//while循环,先判断后执行语句
public class DoWhile {
    public static void main(String[] args) {
        int i = 0, j = 0;
        /System.out.println("befor while j = " + j);
        while(i > 1){
            j++;
        }
        System.out.println("after while j = " + j);
    }
}



//do...while循环,先执行语句后判断
public class DoWhile {
    public static void main(String[] args) {
        int i = 0, j = 0;
        System.out.println("befor while j = " + j);
        do {
            j++;
        }while(i > 1);
        System.out.println("after while j = " + j);
    }
}

//do...while循环,先执行语句后判断
public class DoWhile {
    public static void main(String[] args) {
        int i = 0, j = 0;
        System.out.println("befor while j = " + j);
        do {
            j++;
        }while(i > 1);
        System.out.println("after while j = " + j);
    }
}


//do...while循环,先执行语句后判断
public class DoWhile {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in); //创建扫描器,接收控制台输入信息
        String pwd1 = "0";  //保存密码的变量
        String pwd2 = "-1";
        do{
            System.out.println("请输入密码:");
            pwd1 = sc.nextLine();   //输入密码时,从控制台获取信息
            System.out.println("请再次输入密码:");
            pwd2 = sc.nextLine();   //输入密码时,从控制台获取信息
            if(!pwd1.equals(pwd2)){ //取非,如果不相等则...
                System.out.println("您输入的密码不一致,请重新输入!");
            }
        }while(!pwd1.equals(pwd2)); 
        System.out.println("设置密码成功!");
    }
}

//运行结果
请输入密码:
123
请再次输入密码:
321
您输入的密码不一致,请重新输入!
请输入密码:
123
请再次输入密码:
123
设置密码成功!

Process finished with exit code 0
  1. 表达式不允许为空;
  2. 表达式不应该是常数;
  3. 循环体中要有条件表达式值的语句,否则将成改变为死循环;
  4. 不要少写分号。

1.2.4.循环语句

初始表达式1:最常用的是给循环变量赋值;

//实例--使用for循环,计算从1加到100的和。
public class for1 {
    public static void main(String[] args){
        int sum = 0;
        for(int i = 1; i <=100; i++){
            sum = sum + i;
        }
        System.out.println("sum= " +sum);
    }
}

//运行结果
sum= 5050

Process finished with exit code 0

//结论:用for循环比while循环代码会更简洁

//实例
import java.util.Scanner;
public class foreach {
    public static void main(String[] args){
        int arr[]={7,10,11,56,99};
        for(int x:arr){     //创建一个数字数据类型一样的循环变量int x
            System.out.println(x);
        }
    }
}

//运行结果
7
10
11
56
99

Process finished with exit code 0

//for循环实例
/*题干:   中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”:
        鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几只?
 */

public class foreach {
    public static void main(String[] args){
        int cock,hen,chick;     //创建三个变量,分别存储三只鸡
        for(cock=1;cock<=20;cock++){
            for(hen=1;hen<=33;hen++){
                for(chick=3;chick<=99;chick+=3){
                    if(cock*5+hen*3+chick/3==100){      //百钱
                        if(cock+hen+chick==100){     //百鸡
                            System.out.println("公鸡:"+cock+"母鸡:"+hen+"小鸡"+chick);
                        }
                    }
                }
            }
        }
    }
}
//结论:这种循环取数进行判断的方法可以叫做"穷举法";

//运行结果
公鸡:4母鸡:18小鸡78
公鸡:8母鸡:11小鸡81
公鸡:12母鸡:4小鸡84

Process finished with exit code 0

1.3.1.switch语句

//switch实例
/*
题干: 10-9分为优,8分为良,7-6为中,6分以下为差。
*/
import java.util.Scanner;
public class switch1 {
    public static void main(String[] args){
        System.out.println("请输入成绩,数字范围10以内!");
        Scanner sc =new Scanner(System.in);
        int grade= 0 ;
        grade = sc.nextInt();
        switch(grade){
        case 10:System.out.println("成绩为优");break;   //如果成绩为10,则成绩为优,否则跳出该语句
        case 9:System.out.println("成绩为优");break;
        case 8:System.out.println("成绩为良");break;
        case 7:System.out.println("成绩为中");break;
        case 6:System.out.println("成绩为差");break;
        case 5:System.out.println("成绩为差");break;
        case 4:System.out.println("成绩为差");break;
        case 3:System.out.println("成绩为差");break;
        case 2:System.out.println("成绩为差");break;
        case 1:System.out.println("成绩为差");break;
        case 0:System.out.println("成绩为差");break;
        default:System.out.println("成绩无效");break;
    }
    }
}

//运行结果
请输入成绩,数字范围10以内!
6
成绩为差

Process finished with exit code 0

1.4.循环控制--break关键字--continue关键字

1.4.1break:它能终端当前的循环,不管后面有什么代码;

 

//实例--控制内层循环和外层循环
public class demo2 {
    public static void main(String[] args){
        for(int i=0; i<3; i++){        //循环变量i,循环3次
            System.out.println("i="+ i);
            for(int j=0; j<6; j++){
                System.out.println("j="+ j);
                if (j==4){
                    break;    //跳出内层循环
                }
            }
        }
    }
}

//运行结果
i=0
j=0
j=1
j=2
j=3
j=4
i=1
j=0
j=1
j=2
j=3
j=4
i=2
j=0
j=1
j=2
j=3
j=4

Process finished with exit code 0
//实例--利用“标签”功能同时控制内层循环与外层循环
public class demo2 {
    public static void main(String[] args){
        loop:for(int i=0; i<3; i++){    //定义标签(标签名可写成任意名)
            System.out.println("i="+ i);
            for(int j=0; j<6; j++){
                System.out.println("j="+ j);
                if (j==4){
                    break loop;  //使得break有了指向性,它将跳出被loop标记的循环(标签的功能极大地提高了break的灵活性)
                }
            }
        }
    }
}

//运行结果
i=0
j=0
j=1
j=2
j=3
j=4

Process finished with exit code 0

1.4.2.continue关键字:它能跳过后面的代码,直接执行下一次的循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

某酷菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值