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);
}
}
总结
default是当没有符合的case时执行的值,default不是必须要有的。
case后面必须是一个常量表达式。
switch语句的判断条件可以接受int、byte、char、short类型,不可以接受其他类型。但在JDK1.7版本以后另外支持string类型。
一旦case匹配,就会无视后面的case条件,直接顺序执行后面的代码直至遇到break为止,利用此特性可以使很多case统一执行。
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
最后更新于