四、程序控制结构

时间:2022-09-08 17:17:11

三大控制结构

    顺序结构,选择结构,循环结构;三种不同的结构都有一个共同点,就是它们都只有一个入口,也只有一个运行出口。这些单一的入口,出口可让程序可控,易读,好维护。


顺序结构

   程序基本的控制结构,一种自上而下的运行方式,即程序会按代码一行一行的执行(顺序执行语句),其实宏观上,程序的正常运行就是一种自上而下的顺序结构。有一些程序并不按照顺序执行语句,这个过程可以称作控制转移,它由另外两大控制结构决定,即“选择结构”,“循环结构”。

四、程序控制结构


选择结构

     选择结构,选择结构一般都是由条件决定程序的执行顺序,在执行的时候,“非此即彼”,什么意思?,即程序走到选择结构的分支语句时,通过条件的判断,从而改变的程序的走向。

四、程序控制结构

    选择结构由两种语句完成,一种是if-else语句,另一种是switch-case语句

if-else语句

使用方式:

                                                            if(条件表达式){

                                                                    语句1

                                                               }else{

                                                                    语句2

                                                              }

解释:if-else语句,小括号内写的是条件表达式,返回值类型为boolean类型,即括号内表达式的值只有true或false,当条件表达式返回true时,程序执行语句1,当返回false时,程序执行语句2

代码演示:

package test;

public class Test {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		if(a+b>=30){
			a = a + 10;
		}else{
			b = a +10;
		}
		System.out.println("a的值为:"+a);
		System.out.println("b的值为:"+b);
	}
}

输出结果: a的值为:20         b的值为:20

代码讲解:条件表达式 a+b >= 30 显然正确的,返回true,这时程序执行了a = a +10,程序就会退出if-else控制语句,开始输出打印a,b的值,这里可以看到,if-else语句满足“非此即彼”的选择结构概念


if语句

   有时候我们可能仅需要判断某些条件是否满足,而需不需要在程序顺序执行的情况下做一些补充,这时我们可以对if-else语句做一些简单的书写

代码演示:

                int a = 10;
		int b = 20;
		if(a+b>=30){
			a = a + 10;
		}
		System.out.println("a的值为:"+a);
		System.out.println("b的值为:"+b);

代码讲解:这段代码跟着上述的例子进行了修改,这时我的需求可能仅仅就是看看a+b能不能大于等于30,如果不能我就给a+10,让他大于等于30。这时候就可以直接仅仅写if语句来完成


if-elseif-else语句

      有时候我们的需求可能就会多了,比如成绩分为A,B,C,D等级,大于等于90分为A,大于等于75分为B,大于等于60分为C,不及格为D

代码演示:

package test;

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		//创建扫面类对象sc
		Scanner sc = new Scanner(System.in);
		//使用扫描类控制接收学生的成绩
		System.out.println("请输入你的考试成绩:");
		int score = sc.nextInt();
		if(score>=90){
			System.out.println("你的成绩等级为A");
		}else if (score>=75) {
			System.out.println("你的成绩等级为B");
		}else if (score>=60) {
			System.out.println("你的成绩等级为C");
		}else {
			System.out.println("你的成绩等级为D");
		}
		//关闭扫描对象
		sc.close();
	}
}

代码讲解:上述例子展示,我们可以看到比if-else语句多了两个esleif(条件表达式)的判断语句,elseif()个数可以根据需要自行添加多个,或者只有一个,大家需要记住的是在if-else分支语句中,只有if和elseif是可以带着条件表达式的,而else后面是不跟着条件表达式的

    相信初学者回想,怎么才能让我们输入一些数据给后台,然后实现人机交互呢?这里就给大家提供了一个扫描类的方法使用,使用扫描类前,我们需要创建一个扫描类对象,写法是固定的,对象名sc可以更换。然后我们定义一个变量int a,然后用扫描类sc.nextInt()方法接收用户从键盘传入的数字。最后我们需要调用sc对象的close()方法,我们用完了这个扫描类对象,我们就释放它。这里一些知识后期接着补充,现在只用知道怎么从控制台获取用户输入的数据即可


多分支语句switch-case

    在程序选择结构中,当我们有多分支语句的时候如果只用if-else控制会比较繁琐,所以java还提供了switch-case语句

使用方式:

                                                    switch(条件表达式)

                                                   {

                                                        case1:语句1;break;

                                                        case2:语句2;break;

                                                        ...

                                                        default:最后一个语句;break;

                                                    }

解释:这里的表达式,可就不再是true和false两个这么少了,它可以有很多个,比如返回值可以是1,2,3,...n,

也可以是a,b,c.....,也可以是字符,这里只需要我们自行选择即可。需要注意的是case后面跟着的是常量选择值。

我们来个案例演示一下。

    例如:  有时候我们会有这样的需求,学校一开始给我们的评级为ABCDE五个等级,现在需要转换成分数,来和其他科目整合一起,计算成绩总分,这时候我们可以这么做

代码演示:

package test;

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		//定义扫面类sc
		Scanner sc = new Scanner(System.in);
		//使用扫描类控制接收学生的成绩
		System.out.println("请输入你的成绩等级(请输入大写的等级):");
		String grade = sc.next();
		switch (grade) {
		case "A":
			System.out.println("你的成绩为90分");
			break;
		case "B":
			System.out.println("你的成绩为80分");
			break;
		case "C":
			System.out.println("你的成绩为70分");
			break;
		case "D":
			System.out.println("你的成绩为60分");
			break;
		default:
			System.out.println("不及格,没有成绩");
			break;
		}
		//关闭扫描对象
		sc.close();
	}
}
代码讲解:有了switch-case语句,我们在处理多个条件的情况下就会相对简单多了,这里大家需要提醒一下,上述代码看似有5个条件,其实只限定了4个条件,即A,B,C,D的条件,剩下的default,意思是其他情况都会执行
System.out.println("不及格,没有成绩");

大家可以随便输入任意字符,就会发现,程序都会执行输出"不及格,没有成绩"。然后就是,每个case后面都应该break;break语句的作用是当程序执行了case里的语句就会跳出switch-case结构,即使程序有了出口。

    具体怎么选择if-else语句,switch-case语句,这里建议是当条件情况少的时候,推荐使用if-else,当条件多了的时候就是用switch-case语句。


循环结构

    程序的又一重要控制结构,循环结构,有时候我们可能会执行某一个动作,如果没有循环结构,我们可能只能反复的书写代码执行,如从1输出到100,我们可能就要写100条输出语句,而循环结构,可以让我们只写一条。

for循环

   for循环,是循环结构中的一种循环方式,一般是在知道循环次数的情况,使用for循环

    例如:从1输出到100

代码演示:

package test;

public class Test {
	public static void main(String[] args) {
		for(int i = 1; i <= 100; i++){
			System.out.print(i+" ");
		}
	}
}

代码讲解:

    上述就是for循环最基本的使用方式,在输出语句的时候我们选择了print(),它和println()输出的区别是print()方法输出的内容不会换行,而是用println()方法,输出的时候会自动给我们换行。


for()循环详细讲解:

                        for(①表达式; ②结束条件; ④步长){
                                ③执行语句;
                        }

在for循环里面,我们一定会提供一个初始常量即①,然后是结束条件②,再来是③执行语句,最后是步长④

程序运行顺序

        第一次:①--->②--->③--->④

        第二次:②--->③--->④

        第三次:②--->③--->④

        ....

        直到结束条件不满足了就会停止循环

上述案例中i 从 1 开始计数,当i = 101,不满足i <=100时,程序停止输出,退出for循环


while循环

   一般不知道循环的具体次数我们都会选择while循环或者do-while循环,还是跟着上面的从1输出到100的例子

代码演示:

package test;

public class Test {
	public static void main(String[] args) {
		int i = 1;
		while(i<=100){
			System.out.print(i+" ");
			i++;
		}
	}
}

代码讲解:我们先定义一个计数变量i,然后控制条件i<=100满足就执行循环体输出语句,然后i++;达到控制循环的作用

while循环详解:

                                                    ①定义循环变量初值

                                                    while(②控制条件){

                                                                    ③循环体

                                                                    ④步长

                                                     }

        第一次:①--->②--->③--->④

        第二次:②--->③--->④

        第三次:②--->③--->④

        ....

        直到结束条件不满足了就会停止循环


do-while循环

   do-while循环和while循环差别不大,do-while循环相对while循环来说,差别就是do-while会先执行一次,再进行条件的判断,而while循环上来就判断,然后才是执行

代码演示:

package test;

public class Test {
	public static void main(String[] args) {
		int i = 1;
		do{
			System.out.print(i+"");
                        i++; 
                 }while(i<=100);
	}
}

代码讲解:和while循环基本没什么差别,执行的循环体是放在do{}里面,记得while()后面需要加上";"结束



    总结点评:程序因为有了控制结构,所以代码的形式才是多样,在程序的世界里,方法永远没有唯一,结果却都应该只有一个,所有结构都应该根据现实情况进行适应的调整,没有最好的方案,只有更好的,期待大家都能在bigdodo的文档帮助下,有效的学会玩java。让我们一起去感受体验代码的魅力。共勉!