Java控制流程(顺序,分支,循环)


概述
1996 年,计算机科学家 Bohm 和 Jacopini 证明了:任何简单或复杂的算法都可以由 顺序结构分支结构循环结构这三种基本结构组合而成。
它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。

一、顺序结构

顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作

二、分支结构

分支结构又被称为选择结构,根据条件成立与否来执行操作,

1、if 条件语句

if 条件结构是根据条件判断之后再做处理
if(条件语句){…}
if (条件语句){…}else{…}
if (条件语句){…}else if(条件语句){…}
if (条件语句){…}else if(条件语句){…}else{…}
例子:用户输入学生成绩,判断成绩是否及格,判断条件为 优良: > 90、良好:81-90、中:60-80、不及格:<60

1if 条件语句 
import java.util.Scanner;
public static void main(String[] args) {
//创建Scanner对象input
		Scanner input = new Scanner(System.in);//扫描用户在控制台的输入内容
		System.out.println("请输入成绩:");

		int i = input.nextInt();//接收用户输入的int数据

		if(i >= 91) {
			System.out.println("优");
		}
		else if (i >= 81 && i <91){
			System.out.println("良");
		}
		else if (i >= 60 && i<= 80) {
			System.out.println("中");
		}
		else {
			System.out.println("不及格");
		}
	}

2、switch 语句

switch(表达式){
case 取值 1: 语句块 1;break;
case 取值 n: 语句块 n;break;
default: 语句块 n+1;break;
}
switch 语句有关规则
表达式的返回值必须是下述几种类型之一:int, byte, char, short,String
case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
default 子句是可选的;
break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行!
Case 后面的执行体可写{ }也可以不写{ }

例题:多分支月份输出天数(充分利用语句特性)

public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入月份:");
		
		int mouth = input.nextInt();
		
	    switch (mouth) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			System.out.println(mouth+"月有31天!");
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			System.out.println(mouth+"月有30天!");
			break;
		case 2:
			System.out.println(mouth+"月有28天!");
			break;
		default:
			System.out.println("请输入正常月份哦!");
			break;
		}
	}

三、循环结构

循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。

1、简介

  • 循环语句功能
    在循环条件满足的情况下,反复执行特定代码
  • 循环语句分类
    for 循环
    while 循环
    Do/while 循环

2、while 循环

符合条件,循环继续执行;否则,循环退出
特点:先判断,再执行
语法:
while(条件表达式){
//语句块;
}
使用 while 循环的步骤
1、分析循环条件和循环操作
2、套用 while 语法写出代码
3、检查循环是否能够退出
实现示例:
录入 班级人数 和 学员成绩 ,计算班级 学员 的 平均成绩

public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入班级人数:");
		//使用变量classnums记录班级总人数
		int  classnums = input.nextInt();
		//用于记录循环的次数,控制循环何时结束
		int num = 0;
		//用来记录班级总成绩
		int sum = 0;
		//当num的值小于班级总人数classnums时循环进行
		while(num<classnums) 
		{
		//记录到第几个班级人数
		num++;
		
		System.out.println("请输入"+num+"位学员的成绩:");
		int score = input.nextInt();//获取学员成绩
		sum += score;
		}
		System.out.println("平均成绩为:"+sum/classnums);
	}

3、do-while 循环

先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
特点:先执行,再判断
语法:
do {
循环操作
}while ( 条件表达式 );

  • while 循环和 do-while 循环的区别?
    while:先判断条件,如果条件满足,再执行循环操作
    do while:先执行一遍循环操作,然后再判读条件,如果条件满足,继续执行循环操作
public static void main(String[] args) {
	int i = 0;
	do {
		i++;
		System.out.println(i);
	}while(i<5);
}

4、for 循环

语法:
for(初始化参数;判断条件 ;更新循环变量){
循环体;
}
1.

public static void main(String[] args) {
	for (int i = 0; i < 10; i++) {
		System.out.println(i);
	}
 }
结果 0 1 2 3 4 5 6 7 8 9 
for (;; ) {
		System.out.println(i);
	}
 }
相当于死循环 默认条件为true
for (System.out.println(1);true;System.out.println(2) ) {
		System.out.println(3);
	}
 }
结果: 1 2 3 2 3 2 3
相当于先执行println(1)再执行默认true然后println(2)println(3)最后一直循环2 3

5、嵌套for 循环图形打印

  • 外层循环控制的输行数
  • 内层循环控制的是列数
 public static void main(String[] args) {
	//外层循环控制的输行数
	for (int i = 0; i < 5; i++) {
		//内层循环控制的是列数
		for (int j = 0; j < 5; j++)
 {
			System.out.print("* ");
		 }
		System.out.println();
	}
 }
 结果:
* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * * 

例题2 打印

   *
  ***
 *****
*******
 *****
  ***
   *
   public static void main(String[] args) {

		//第一个外循环先打印菱形前4行
		for (int i = 0; i < 4; i++) {
		//i = 0 1 2 3 
		//内层循环1,控制的是每行空格数 :  第一行3个空格, 第二行2个空格,第三行1个空格,第四行0空格     
			for (int j = i+1; j < 4 ; j++) 
				{
					System.out.print(" ");
				}
		//内层循环2。控制的是每行*数   :   第一行1个*,第二行3个*…
			for (int j = 0; j < i*2+1 ; j++) 
				{
				System.out.print("*");
				}
			System.out.println();
			}
		//第二个外循环打印下面3行 i1 3 2 1
		for (int i1 = 3; i1 > 0 ; i1--) 
		{
			//打印下面3行每行空格的数量
			for (int i = 0; i < 4-i1; i++)
			{
				System.out.print(" ");
			}
			//打印下面3行每行*的数量
			for (int j = 0; j < i1*2-1 ; j++) 
			{
				System.out.print("*");
			}
		System.out.println();
		}
	 }      

例题3:空心菱形

   *
  * *
 *   *
*     *
 *   *
  * *
   *
   public static void main(String[] args) {
	//外层循环控制的输行数    4 行
	for (int i = 0; i < 4; i++) 
	{
	//i = 0 1 2 3 
	//内层循环1,控制的是空格列数   空格数跟原本的还是不变 
		for (int j = i+1; j < 4 ; j++)
		{
				System.out.print(" ");
		}
		
		for (int j = 0; j < i*2+1 ; j++) 
		{
			//原本实心的现在只打印这一行的第一个和最后一个 用if语句来判断
			if(j == 0 || j == i*2) 
			{
			System.out.print("*");
			}
			//这一行其余的地方来打空格
			else 
			{
				System.out.print(" ");
			}
		}
		//换行
	System.out.println();
	}
	//打印下三行i1 3 2 1
	for (int i1 = 3; i1 > 0 ; i1--) {
		//空格数和原来不变
		for (int i = 0; i < 4-i1; i++)
		{
			System.out.print(" ");
		}
		for (int j = 0; j < i1*2-1 ; j++) 
		{
			//原本实心的现在只打印这一行的第一个和最后一个 用if语句来判断
			if(j == 0||j == i1*2-2) 
			{
			System.out.print("*");
			}
			//这一行其余的地方来打空格
			else 
			{
				System.out.print(" ");
			}
		}
		System.out.println();
	}
 }                   

6、Break与continue

/**
	 * break与continue语句
	 * 		break是用于终止本轮所有次循环。即不执行本次循环中break后面的语句,直接跳出循环。
	 * 		continue是用于终止本轮本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		
		for(int i=0;i<10;i++) {
			if(i==5) {
				continue;
			}
			System.out.println(i);//只是跳过i=5的打印结果
		}
	}

}

7、 如何退出多重循环

7、 如何退出多重循环
/**
	 * 如何退出多重循环
	 * @param args
	 */
	public static void main(String[] args) {
		haha:for(int i=0;i<10;i++) {
			for(int j=0;j<10;j++) {
				System.out.println("i="+i+" , j="+j);
				if(i==5 && j==5) {
					break haha;
				}
			}
		}
	}
在主循环前加:号和变量名haha:break后+变量名即可退出循环

8、判断用户输入类型

input.hasNextInt()//判断用户是否输入为Int类型
If(input.hasNextInt){
System.out.println("int");
}
Else{
System.out.println("数据类型错误");

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值