JavaSE----基础语法(程序流程控制)

1.7 程序流程控制

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
    流程控制语句分类流程控制语句分类: 顺序结构、 选择结构、 循环结构。

1.7.1顺序结构

    从上往下,依次执行。

    示例:

class ShunXuJieGouDemo {
	public static void main(String[] args) {
		System.out.println("程序开始了");
		
		System.out.println("Hellow Java");
		
		System.out.println("程序结束了");
	}
}
    程序运行结果:

JavaSE----基础语法(程序流程控制)_第1张图片

1.7.2选择结构

1. if语句


    格式一:


    if(比较表达式) {
         语句体;
    }

    执行流程:先计算比较表达式的值,看其返回值是true还是false。如果是true,就执行语句体;如果是false,就不执行语句体。

    示例1:

class IfDemo{
	public static void main(String [] args){
		int x = 10;
		if(x == 10){
			System.out.println("x的值为10");
		}
		System.out.println("Over");
	}
}
    运行结果:

    JavaSE----基础语法(程序流程控制)_第2张图片

    注意事项;

    1、比较表达式无论简单还是复杂,结果必须是boolean类型
    2、if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
    3、一般来说:有左大括号就没有分号,有分号就没有左大括号


    格式二:

    if ( 条件表达式 )
    {
         语句体1;
    }
    else
    {
         语句体2;
    }

    执行流程:首先计算比较表达式的值,看其返回值是true还是false。如果是true,就执行语句体1;
如果是false,就执行语句体2;

    示例:判断键盘所输入的一个整数是奇数还是偶数

import java.util.Scanner;//导包
class IfTest{
	public static void main(String [] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		//输入想要判断的整数
		System.out.println("输入想要判断的整数:");
		int x = sc.nextInt();
		//判断是奇数还是偶数
		int y = x%2;
		if(y == 0){
			System.out.println("所输入的数是偶数");
		}
		else{
			System.out.println("所输入的数是奇数");
		}
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第3张图片
    if else 语句和三目运算符的联系和区别:

class IfDemo2{
	public static void main(String [] args){
		int x = 10;
		int y ;
		if(x > 10){
			y = 100;
		}
		else{
			y = 200;
		}
		System.out.println("y="+y);
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第4张图片

    用三目运算符实现:

class IfDemo2{
	public static void main(String [] args){
		int x = 10;
		int y = x > 10? 100:200;
		System.out.println("y="+y);
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第5张图片

    结论:当if else运算后,有一个具体的结果时,可以简化写成三元运算符。

    格式三:

    if(比较表达式1) {
        语句体1;
    }

    else if(比较表达式2) {
        语句体2;
    }

    else if(比较表达式3) {
        语句体3;
    }
    ...
    else {
        语句体n+1;
    }

    示例:用键盘录入一个成绩,判断并输出成绩的等级。

    90-100 优秀
    80-90  好
    70-80  良
    60-70  及格
    0-60   不及格

import java.util.Scanner;
class IfDemo3{
	public static void main(String [] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		//录入数据
		System.out.println("请输入你的成绩:");
		int score = sc.nextInt();
		
		if(score > 90 && score <= 100){
			System.out.println("优秀");
		}
		else if(score > 80 && score <= 90){
			System.out.println("好");
		}
		else if(score > 70 && score <= 80){
			System.out.println("良");
		}
		else if(score >= 60 && score <= 70){
			System.out.println("及格");
		}
		else if(score >= 0 && score < 60){
			System.out.println("不及格");
		}
		else{
			System.out.println("您输入的成绩有误");
		}
	}
}
    运行结果:

2. switch语句

    格式:

    switch(表达式) {
        case 值1:
            语句体1;
            break;
        case 值2:
            语句体2;
            break;
        ...
        default:
            语句体n+1;
            break;

    }

    注意:switch语句的表达式的取值时是有限定的,可取的值为:byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是字符串。

    示例1:键盘录入一个数据,根据这个数据,我们输出对应的星期几
                键盘录入1,对应输出星期一
                键盘录入2,对应输出星期二
                ...
                键盘录入7,对应输出星期日


import java.util.Scanner;
class SwitchDemo{
	public static void main(String [] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//键盘控制录入数据
		System.out.println("请输入一个数据(1-7)");
		int week = sc.nextInt();
		
		switch(week){
			case 1:
			System.out.println("星期一");
			break;
			case 2:
			System.out.println("星期二");
			break;
			case 3:
			System.out.println("星期三");
			break;
			case 4:
			System.out.println("星期四");
			break;
			case 5:
			System.out.println("星期五");
			break;
			case 6:
			System.out.println("星期六");
			break;
			case 7:
			System.out.println("星期七");
			break;
			default:
			System.out.println("输入的数据有误");
			break;
		} 
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第6张图片
    注意事项:1、case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。

    2、default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。

    3、break可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。

    4、进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。即使default放在case上面,执行顺序也不变。

    5、结束switch语句的两种情况:①遇到break,②执行到switch语句结束。

    示例2:看程序写结果

class SwitchTest {
	public static void main(String[] args) {
		int x = 2;
		int y = 3;
		switch(x){
			default:
				y++;
				break;
			case 3:
				y++;
			case 4:
				y++;
		}
		System.out.println("y="+y);
		System.out.println("---------------");
		
		int a = 2;
		int b = 3;
		switch(a){
			default:
				b++;
			case 3:
				b++;
			case 4:
				b++;
		}
		System.out.println("b="+b);
	}
}

    分析:第一个switch语句执行时,执行到default语句后,后面有break,所以就退出switch语句,执行输出语句。

    第二个switch语句执行时,执行到default语句后,因为没有break,所以继续执行后面的两个case语句而不用判断是否满足条件。

    运行结果:

JavaSE----基础语法(程序流程控制)_第7张图片
    示例3:用switch语句实现键盘录入月份,输出对应的季节

import java.util.Scanner;
class SwitchTest4{
	public static void main(String [] args){
		//创建一个键盘录入对象
		Scanner sc = new Scanner(System.in);
		//输入数据
		System.out.println("请输入月份(1-12)");
		int month = sc.nextInt();
		
		switch(month){
			case 1:
			case 2:
			case 12:
				System.out.println("冬季");
				break;
			case 3:
			case 4:
			case 5:
				System.out.println("春季");
				break;
			case 6:
			case 7:
			case 8:
				System.out.println("夏季");
				break;
			case 9:
			case 10:
			case 11:
				System.out.println("秋季");
				break;
			default:
				System.out.println("你输入的月份有误");
		}
	}
}
    程序运行结果:

JavaSE----基础语法(程序流程控制)_第8张图片

    思考:if和switch语句什么时候用比较合适:

     if语句使用前提:1、针对结果是boolean类型的判断

     2、针对一个范围的判断

     3、针对几个常量值的判断

     switch语句使用前提:针对几个常量值的判断

      针对几个常量值的判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高。

1.7.3 循环结构

1. for循环

    格式:

    for(初始化语句;判断条件语句;控制条件语句) {
          循环体语句;

    }
    for里面的三个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复整个过程,直到条件不满足为止。

    示例一:使用for循环在控制台输入3句“hellow world”

class ForDemo{
	public static void main(String [] args){
		for(int i = 1;i <= 3;i++ ){
			System.out.println("hellow world");
		}
	}
}

    运行结果:

JavaSE----基础语法(程序流程控制)_第9张图片

    练习1:求出1-10之间数据之和

class ForDemo3{
	public static void main(String [] args){
		int sum = 0;
		for(int i = 1;i <= 10;i++){
			//int sum = 0;
			sum = sum + i;
		}
		System.out.println("sum:"+sum);
	}
}

    运行结果:

JavaSE----基础语法(程序流程控制)_第10张图片

    练习2:求出1-100之间偶数和

class ForDemo4{
	public static void main(String [] args){
		int sum = 0;
		for(int i = 1;i <= 100;i++){
			if(i%2 == 0){
				sum += i;
			}
		}
		System.out.println("sum:"+sum);
	}
}

    运行结果:

JavaSE----基础语法(程序流程控制)_第11张图片

    练习3:在控制台输出所有的”水仙花数”(所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身)。

class ForDemo6{
	public static void main(String [] args){
		int count = 0;
		for(int i = 100;i <= 999;i++){
			int x = i%10;//求出个位数
			int y = i/10%10;//求出十位数
			int z = i/100%10;//求出百位数
			
			if(i == (x*x*x+y*y*y+z*z*z)){
				System.out.println(i);
				count++;
			}
		}
		System.out.println("所有的水仙花数的个数是:"+count);
	}
}

    运行结果:

JavaSE----基础语法(程序流程控制)_第12张图片

2. while循环

    格式:

    初始化语句;
    while(判断条件语句) {
        循环体语句;
        控制条件语句;

    }

    示例1:

class WhileDemo3{
	public static void main(String [] args){
		//while循环
		int count2 = 0;
		int i = 100;
		while(i <= 999){
			int ge = i%10;
			int shi = i/10%10;
			int bai = i/100%10;
			
			if(i == (ge*ge*ge + shi*shi*shi + bai*bai*bai)){
				count2++;
			}
			i++;
		}
		System.out.println(count2);
	}
} 

    运行结果:

JavaSE----基础语法(程序流程控制)_第13张图片

    练习:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
 请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

class WhileDemo5{
	public static void main(String [] args){
		//定义一个统计变量,初始化值为0;
		int count = 0;
		//最高山峰是珠穆朗玛峰:8848m这是最终的厚度
		//我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
		double start = 0.01;
		double end = 8848.00;
		while(start < end){
			//只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
			count++;
			//没折叠一次厚度就会变为原来的2倍
			start *= 2;
		}
		System.out.println("要折叠"+count+"次");
	}
}

    运行结果:

JavaSE----基础语法(程序流程控制)_第14张图片

    思考:while循环和for循环的区别?

    1、for为了循环而定义的变量在for循环结束就在内存中释放,而while循环使用的变量在循环结束后还可以继续使用。

    2、for循环适合针对一个范围判断进行操作,while循环适合判断次数不明确操作 

3.  do...while 循环 

    格式:

    初始化语句;
    do {

        循环体语句;
        控制条件语句;

    }

    while(判断条件语句);

 

    示例: 

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

    运行结果:

JavaSE----基础语法(程序流程控制)_第15张图片

     循环语句的区别:

    do...while循环至少执行一次循环体,而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

 

    注意死循环:

    两种最简单的死循环:while(true){...}、for(;;){...}

4. 循环嵌套

     示例1:请输出下面的4行5列的星星(*)图案。

        *****
        *****
        *****
        *****

    代码如下:

 

class ForForDemo{
	public static void main(String [] args){
		for(int x = 1;x <= 4;x++){
			for(int y = 1;y <= 5;y++){
				System.out.print("* ");
			}
			System.out.println();
		}
	}
}


    运行结果:

JavaSE----基础语法(程序流程控制)_第16张图片

    示例2:请输出下列的形状

        *
        **
        ***
        ****
        *****

    代码如下:

 

class ForForDemo2{
	public static void main(String [] args){
		for(int x = 1;x <= 5;x++){
			for(int y = 1;y <= x;y++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}


    运行结果:

JavaSE----基础语法(程序流程控制)_第17张图片

    示例3:在控制台输出九九乘法表。

1x1=1
1x2=2    2x2=4
1x3=3    2x3=6    3x3=9
 
...
 
1x9=9    2x9=18    ...    ...        9x9=81

    代码如下:

class ForForDemo3{
	public static void main (String [] args){
		for(int i = 1;i <= 9;i++){
			for(int j = 1;j <= i;j++){
				System.out.print(j+"x"+i+"="+i*j+'\t');
			}
			System.out.println();
		}
	}
}

    运行结果:

JavaSE----基础语法(程序流程控制)_第18张图片

    注意:代码中的"\t"是一个转义字符,也就是制表符。还有其他的一些转义字符:\n:回车,\b:退格,\r:回车符
 

1.7.4 控制跳转语句

1. break(跳出)

    应用范围:

    1)、switch语句中

    2)、循环语句中

    示例:

 

class BreakDemo{
	public static void main(String [] args){
		for(int x = 0;x < 10;x++){
			if(x==3){
				break;
			}
			System.out.println("x="+x);
		}
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第19张图片

    当x的值为3的时候,跳出循环

2. continue(继续)

    应用范围:循环结构。

    continue语句是结束本次循环继续下次循环。

    示例:

class Continue{
	public static void main(String [] args){
		for(int x = 0;x <= 10;x++){
			if(x==3){
				continue;
			}
			System.out.println("x="+x);
		}
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第20张图片

    当x的值为3时,跳出本次循环,执行下次循环。

    注意:这两个语句离开应用范围,存在是没有意义的。

    扩展知识:标号的出现,可以使得这两个语句作用于指定范围。

    示例1:

class BreakDemo2{
	public static void main(String [] args){
		out:for(int x = 0;x <= 3;x++){
			in:for(int y = 0;y <=4;y++){
				if(y==2){
					break;
				}
				System.out.println("x="+x+",y="+y);
			}
		}
	}
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第21张图片
    示例2:

class ContinueDemo2{
	public static void main(String [] args){
		out:for(int x  = 0;x <= 3;x++){
			in:for(int y = 0;y <= 4;y++){
				if(y==2){
					continue;
				}
				System.out.println("x="+x+",y="+y);
			}
		}
	}
}

   

     运行结果:
JavaSE----基础语法(程序流程控制)_第22张图片

     练习:小芳的妈妈每天给她2.5元钱,她都会存起来,但是, 每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。

    分析:小芳的妈妈每天给她2.5元钱        double dayMoney = 2.5;

    她都会存起来        double moneySum = 0;

    因为是统计的题,所以必须有一个统计变量,在这里是用于统计天数的        int dayCount = 0;

    当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱         dayCount%5==0时,moneySum -= 6;

    经过多少天,可以存到100元        double result = 100;

    方法一:使用while循环

class WhileDemo{
	public static void main(String [] args){
		double dayMoney = 2.5;
		double moneySum = 0;
		double result = 100;
		int dayCount= 0;
		while(moneySum < result){
			dayCount++;
			moneySum += dayMoney;
			if(dayCount%5==0){
				moneySum -= 6;
			}
		}
		System.out.println(dayCount);
	}
}


 

    运行结果:

JavaSE----基础语法(程序流程控制)_第23张图片
    方法2:使用while死循环

class WhileBreakDemo{
	public static void main(String [] args){
		double dayMoney = 2.5;
		double moneySum = 0;
		int dayCount = 0;
		int result = 100;
		while(true){
			dayCount++;
			moneySum += dayMoney;
			if(moneySum >= result){
				break;
			}
			if(dayCount%5 == 0){
				moneySum -= 6;
			}
		}
		System.out.println("一共用了"+dayCount+"天存了100元");
	}	
}
    运行结果:

JavaSE----基础语法(程序流程控制)_第24张图片


 

你可能感兴趣的:(Java)