9.22-流程控制语句

[TOC]

流程控制语句

作用:可以控制程序的执行流程

分类:

  • 顺序结构

  • 选择结构

  • 循环结构

顺序结构

执行流程:从上往下,从左往右依次执行

选择结构

if语句

语法格式一

if(比较表达式){

语句体;

}

执行流程:首先计算比较表达式的值,看其返回结果为true还是false

如果为true,则执行语句,反之不执行

例子

package day9_22;

public class Demo1 {
	public static void main(String[] args) {
		int age  = 17;
		if(age>=18) {
			System.out.println("您可以访问此网站");
		}
	}
}

语法格式二

if(语法表达式){

语句体1;

}else{

语句体2;

}

执行流程:执行表达式,当返回结果为true时,执行语句体1,反之执行语句体2

例子

package day9_22;
public class Demo2 {
	public static void main(String[] args) {
		int x =102;
		//判断x奇偶性
		if(x%2==0) {
			System.out.println(x+"是偶数");
		}else {
			System.out.println(x+"是奇数");
		}
	}
}

语法格式三

if(比较表达式1){

语句体1;

}else if (比较式2){

语句体2;

}

……

}else{

语句体n+1;

}

例子

package day9_22;
import java.util.Scanner;
public class Demo3 {
	/**
	 * 键盘录入百分制成绩
	 * 判断输出该成绩对应的等级
	 * 90-100 优秀
	 * 80-89 良好
	 * 70-79 中等
	 * 60-69 及格
	 * 0-59 不及格
	 * 
	 * 判断奖学金金额
	 * 优秀 2000
	 * 良好 200
	 * 中等 20
	 * 其他 0
	 * @param args
	 */
public static void main(String[] args) {
	Scanner sc =new Scanner(System.in);
	System.out.println("请输入百分制成绩");
	int score = sc.nextInt();
	String grade;
	int money;
	if (score>=90&&score<100) {
		grade ="优秀";
		money = 2000;
	}else if (score>=80&&score<89) {
		grade ="良好";
		money = 200;
	}else if (score>=70&&score<79) {
		grade ="中等";
		money = 20;
	}else if (score>=60&&score<69) {
		grade ="及格";
		money = 0;
	}else if (score>=0&&score<59) {
		grade ="不及格";
		money = 0;
	}else {
		grade = "录入格式有误!";
		money = 0;
	}
	System.out.println(grade+"奖学金为"+money);
	sc.close();
}
}

switch语句

语法格式

switch (表达式){
    case 值1:
        语句体1;
        break;
    case 值2:
        语句体2:
        break;
    ...
    default:
        语句体n+1;
        break;//default中的break可以省略不写
}

例子1

package day9_22;

import java.util.Scanner;

public class SwitchDemo1 {
	/**
	 * 在控制台输入一个1-7之间的整数
	 * 判断输出对应的星期数
	 * eg.
	 * 2 星期二
	 * 7 星期七
	 */
	public static void main(String[] args) {
		Scanner scanner =new Scanner(System.in);
		System.out.println("请输入一个1-7之间的整数");
		int week = scanner.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:
			//break并不是一定需要,视情况而定
			//如果对应的case中没有break,则程序会直接无视下面的case条件直接执行其语句,直至遇到break跳出。
		case 7:
			System.out.println("星期天");
			break;
		default:
			System.out.println("输入数值有误");
//			break;
			//default内的break可以省略
		}
		scanner.close();
	}
}

例子2

package day9_22;

import java.util.Scanner;

public class SwitchDemo2 {
	/**
	 * 键盘录入百分制成绩
	 * 判断输出该成绩对应的等级
	 * 90-100 优秀
	 * 80-89 良好
	 * 70-79 中等
	 * 60-69 及格
	 * 0-59 不及格
	 * 
	 * 判断奖学金金额
	 * 优秀 2000
	 * 良好 200
	 * 中等 20
	 * 其他 0
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个百分值成绩");
		int score = sc.nextInt();
		int point = score/10;
		String str;
		int money;
		switch (point) {
		case 10:
		case 9:
			str="优秀";
			break;
		case 8:
			str="良好";
			break;
		case 7:
			str="中等";
			break;
		case 6:
			str="及格";
			break;
		case 5:
		case 4:
		case 3:
		case 2:
		case 1:
		case 0:
			str="不及格";
			break;
		default:
			str="成绩输入有误!";
			break;
		}
		switch (str) {
		case "优秀":
			money=2000;
			break;
		case "良好":
			money=2000;
			break;
		case "中等":
			money=2000;
			break;
		default:
			money=0;
			break;
		}
		System.out.println("成绩"+str+" 奖学金"+money);
	}
}

总结

  1. default是当没有符合的case时执行的值,default不是必须要有的。

  2. case后面必须是一个常量表达式。

  3. switch语句的判断条件可以接受int、byte、char、short类型,不可以接受其他类型。但在JDK1.7版本以后另外支持string类型。

  4. 一旦case匹配,就会无视后面的case条件,直接顺序执行后面的代码直至遇到break为止,利用此特性可以使很多case统一执行。

  5. switch语句建议判断固定值时使用,if语句建议判断区间范围时使用。

循环结构

for循环

语法格式

for(初始化表达式①;条件表达式②;循环后的操作表达式④){
		循环体③;
}

执行流程

①--->②--->true--->③--->④--->
	②--->true--->③--->④--->
	②--->false-->循环结束

例子1

package day9_22;

public class ForDemo01 {
    	/**
    	 *打印五次Hello World
    	 */
		public static void main(String[] args) {
			for (int i = 1;i<=5;i++) {
				System.out.println("Hello World");
			}
            /**
			 * 执行流程:
			 * i=1 1<=5(true) 打印Hello World i++=2
			 * 		2<=5(true) 打印Hello World i++=3
			 * 		3<=5(true) 打印Hello World i++=4
			 * 		4<=5(true) 打印Hello World i++=5
			 * 		5<=5(true) 打印Hello World i++=6
			 * 		6<=5(false)循环结束
			 */
		}
}

for循环的经典用法:

​ 一般用于与次数个数相关的循环

例子2

package day9_22;

public class ForDemo03 {
		/**
		 * 需求1:求1~10之间的数据和
		 * 	1+2+3+...+10=?
		 * 需求2:求1~10之间的奇数和
		 */
	public static void main(String[] args) {
//		int sum = 0;
//		for (int i=1;i<=10;i++){
//			sum=sum+i;//累加思想  sum=sum+?;
//		}
//		System.out.println(sum);
		/*
		 * sum = 0
		 * i=1 1<=10(true) sum=0+1=1 i=2
		 * 		2<=10(true) sum=1+2=3 i=3
		 * 		3<=10(true) sum=3+3=6 i=4
		 * 	    ...
		 */
		int sum = 0;
		for (int i=1;i<=10;i+=2){
			sum=sum+i;//累加思想  sum=sum+?;
		}
		System.out.println(sum);
		
		
	}
}

例子3-水仙花数

package day9_22;

public class ForDemo04 {
	/**
	 * 需求:在控制台输出所有的水仙花数
	 * 水仙花数指的是一个三位正整数
	 * 其各位数字的立方和等于该数本身
	 * 例如
	 * 153=1*1*1+5*5*5+3*3*3
	 * 额外需求:计算水仙花数总数
	 */
	public static void main(String[] args) {
		int sum=0;
		int count=0;//计数器
		for(int i=100;i<1000;i++) {
			//获取个位
			int g=i%10;
			//获取十位
			int s=i%100/10;
			//获取百位
			int b=i/100;
			//存入乘积
			sum=g*g*g+s*s*s+b*b*b;
			//判断乘积与循环数是否相等,如果相等则输出
			if (sum==i) {
				System.out.println(sum+"是水仙花数");
				count++;
			}
		}
		System.out.println("总计"+count+"个水仙花数");
	}
}

例子4-累加数

package day9_22;

public class ForDemo05 {
		/**
		 * 计算8+88+888+8888+...+9个8的和
		 */
	public static void main(String[] args) {
		int sum = 0;
		int n = 0;
		for(int i=1;i<=9;i++) {
			n = n*10+8;
			sum = sum+n;
		}
		System.out.println(sum);
	}
}s

例子5-计算圆周率

package day9_22;

public class ForDemo06 {
	/**
	 * 计算圆周率值PI
	 * PI=4*(1/1-1/3+1/5-1/7+1/9-1/11+1/13-1/15....
	 * 提示:(1/1-1/3)+(1/5-1/7)+(1/9-1/11)+(1/13-1/15)...
	 * 计算一直累加至(1/1000001-1/1000003)
	 */
	public static void main(String[] args) {
		double sum = 0;
		for (int i=1;i<=1000001;i+=4) {
			double n=1.0/i-1.0/(i+2);
			sum = sum+n;
		}
		System.out.println(4*sum);
	}
}

while循环

语法格式

while(循环条件①){
    循环体②;
}

执行流程

①-->true-->②-->
①-->true-->②-->
①-->false-->循环结束

例子

package day9_22;

public class WhileDemo {
	/**
	 * 需求:在控制台输出1-10
	 */
	public static void main(String[] args) {
		int j = 1; //声明初始值
		while(j<=10) {
			System.out.println(j+"  ");
			j++; //语句执行结束后的操作
		}
	}
}

do while循环

语法格式

do{
    循环体①;
}while(循环条件②)

执行流程

①->②->true->①->②->true->①->②->false->循环结束

while和do while的经典用法

  • 一般用于与次数个数无关的循环

例子

package day9_22;

import java.util.Random;

public class DoWhileDemo01 {
		/**
		 * 需求:
		 * 在控制台打印两个随机正整数
		 * 要求这两个整数的平方和等于50
		 */
	public static void main(String[] args) {
		int sum=0;
		int num=0;
		int num2=0;
		do {
			Random rd = new Random();
			num=rd.nextInt(10);
			num2=rd.nextInt(10);	
			sum=num*num+num2*num2;
		} while (sum!=50);
		System.out.println(num+"与"+num2);
		
	}
}

练习

一、分组数列(for循环)

有一组分组数列:

2/1 3/2 5/3 8/5 13/8 21/13 ...

求该数列前20项之和

二、While循环

在控制台输入一个整数(不限制位数),将该整数前后反置

三、do...while循环

求出一张纸对折多少次可以超过珠穆朗玛峰的高度

纸厚1mm

山高8848m

最后更新于