循环结构

流程控制分类

1. 顺序结构

从上到下,从左到右

2. 分支结构

选择执行,不会同时发生
if

package cn.susu.flow;

import org.junit.Test;

//测试if分支语句,包括它的变种语句else/else if
public class TestIf {
	@Test
	public void testif() {
		//需求:天晴晒被子,下雨收衣服
		//语法:if(布尔表达式)
		//else if 语法:if(){...}else if (){...}else if (){...}else if (){...}else等  
		
	boolean rainning = true;//判断标识,代表是否下雨
	if(rainning) { 
		System.out.println("下雨收衣服");
	}
	
		System.out.println("if语句结束了");
	   }
	 }


if(){…}else{…}
案例:判断年份为平年还是闰年

package cn.susu.basic;
import java.util.Scanner;

/**案例:接受用户输入的年份,判断是平年还是闰年*/
//方式一:能被4整除,并且不能被100整除(闰年)
//方式二:能被400整除(闰年)
public class TestYear {
	public static void main(String[] args) {
		//提示用户输入年份
		System.out.println("请您输入要判断的年份");
		int year = new Scanner(System.in).nextInt();
		//定义一个变量用来保存结果
		String result = "平年";//默认每年都是平年
		//判断是否符合闰年的判断条件
//		if(判断条件) {
//			符合此判断条件的执行代码,如果条件不符合,不执行此代码}
		//方式一:能被4整除,并且不能被100整除
		if(year % 4 == 0) {
			if(year % 100 != 0) {
				result = "闰年";//符合闰年的判断条件,修改结果为闰年
			}
		}
		//方式二:能被400整除
		if(year%400 == 0) {
			result = "闰年";
		}
		else {
			result = "平年";
		}
		//判断
		/**解决方案2*/
		/**判断结构 if(判断条件){满足判断条件以后执行的代码} */
		//if(条件1  || 条件2){是闰年 }
		//if((小条件1  && 小条件2) || 条件2){ 是闰年 }
		//if((能被4整除  && 不能被100整除) || 能被400整除){ 是闰年 }

		if((year % 4 == 0&&year % 100 != 0 ) || year%400 == 0 ){
			result = "闰年";
		}
		//打印判断结果
		System.out.println(year+"年是"+result);
	}

}

if(){…}else if(){…}
循环案例:购买商品满减打折

package cn.susu.basic;

import java.util.Scanner;
//需求:接收用户输入的原价,满1000打9折,满2000打8折,满5000打5折,满10000打1折
/**本类用于练习商品打折案例*/
public class TestDiscount {
	//1.创建入口函数
	public static void  main (String[] args) {
		//2.提示用户输入原价
		System.out.println("请您输入您的价格:");
		//3.接收用户输入的价格
		double price = new Scanner(System.in).nextDouble();
		//4.可计算打折以后的价格
		//4.1定义变量用保存打折后的价格
		double count=price;/**初始值是商品的原价*/
		//4.2判断用户的打折段位并打折
		if(price>=10000) {
			count = price*0.1;
		}else if (price>=5000) {
			count = price*0.5;
		}else if (price>=2000) {
			count = price*0.8;
		}else if (price>=1000) {
			count = price*0.9;
		}
		
		//5.输出实际支付的价格
		System.out.println("您实际应该支付:"+count+"元");
	}

}

switch:多分支(支持char、byte、short、int,不支持long 变量类型)
如果没有break,当某个条件成立,后面所有条件全部生效而且其它代码全都执行

 package cn.susu.basic;
/**本类用于练习swtich结构*/
public class TestSwitch {
	//1.创建程序的入口函数
	public static void main(String[] args) {
		int a = 3;
		/**总结1:变量a的类型支持btye、short、char、int、String*/
		switch(a) {
		/**总结:没有break,就会从输入的语句行一直输出(穿透)到最后一行,有break只打印本行*/
		/**总结2:break表示结束当前的case,如果不加break会向后穿透所有的case,包含default*/
			case 1:System.out.println("1");break;
			case 2:System.out.println("2");break;
			case 3:System.out.println("3");break;
			case 4:System.out.println("4");break;
			case 5:System.out.println("5");
			/**总结3:default是"保底"的一个选项,可加可不加
			 * default是如果没有匹配到任何case是,执行的默认选项
			 * 如果在default之前遇到了break,default才不会执行*/
			default:System.out.println("你是傻子");break;
		}
		
		String s = "Friday";
		switch(s) {
			case "Monday":System.out.println("星期一吃火锅");break;
			case "Tuesday":System.out.println("星期二吃烤肉");break;
			case "Wednsday":System.out.println("星期三吃米饭");break;
			case "Thursday":System.out.println("星期四吃粥");break;
			case "Friday":System.out.println("星期五吃锅包肉");break;
			case "Saturaday":System.out.println("星期六吃山珍海味");break;
			case "Sunday":System.out.println("星期日吃土,喝西北风");break;
			default :System.out.println("想吃啥就吃点啥吧");break;	
		}	
	}
}	



3.循环结构

重复执行,循环不退出死循环。

for循环

package cn.susu.basic;

public class ForDemo {
	//DEBUG调试
	//添加断点:双击目标语句,再次双击,取消断点,结构性语句无法添加
	//如果想查看程序执行的具体细节,需要以Debug模式运行程序并切换试图
	//F6下一步
	public static void main(String[] args) {
		for(int i = 0;i<=10;i++) {
			System.out.println(i);
		}
	}
}

for嵌套循环

package cn.susu.basic;
/**本类用于测试嵌套for循环
 * 外层循环控制行数,内层循环控制列数*/
public class TestForDemo {
	public static void main(String[] args) {
		method1();//测试外层循环执行1次,内层循环执行多次
		method2();//打印一个3行5列的矩形,使用元素*
		method3();//打印一个10行10列的矩形,使用元素*
	}

	private static void method3() {
		for(int i=0;i<10;i++) {
			for(int j=1;j<=10;j++) {
				System.out.print("*");
			}System.out.println();
		}
		
	}

	private static void method2() {
		for(int i= 1;i<=3;i++) {
			for(int j= 1;j<=5;j++) {
				System.out.print("*");
		}System.out.println();//空白行就是换行
	  }
	}

	public static void method1() {
		//需求1:打印1-3
		//需求2:打印1-5
		//当i=1时,满足1<=3条件,所以i值打印1,内层循环的j打印1-5
		//当i=2时,满足1<=3条件,所以i值打印2,内层循环的j打印1-5
		//当i=3时,满足1<=3条件,所以i值打印3,内层循环的j打印1-5
		/**总结1:外层循环执行1次,内层循环执行多次*/
		/**总结2:外层循环控制的是执行的轮数,循环3次,执行3轮*/
		for(int i = 1;i<=3;i++) {	/**外层循环,打印1-3*/
			System.out.print(i);
			System.out.println();
			/**总结3:内层循环控制的是每一轮执行的次数,循环5次,每次打印1-5*/
			for(int j = 1;j<=5;j++) {/**内层循环,打印1-5*/
				System.out.print(j);
			}System.out.println();
		}
	}
}


package cn.susu.basic;
/**本类用于测试99乘法表*/
public class TestFor99 {
	public static void main(String[] args) {
		for(int i=1;i<10;i++) {
			for(int j=1;j<=i;j++) {
				/**拼接打印的算式,后面加了\t
				 * 表示这是表格格式\t也被称作制表符
				 * */
				System.out.print(j+"*"+i+"="+i*j+"\t");
			}System.out.println();
		}
	}
}

  专门破坏死循环方案:break、continue、return

break: 直接结束当前循环,跳出循环体,简单粗暴
break以后的循环体中的语句不会继续执行,循环体外的会执行
注意如果是嵌套for循环,在内层循环遇到了break,只会跳出当前这一层内循环哦,若想全部都跳过,可以使用return

continue: 跳出本轮循环,继续下一轮循环
continue后本轮循环体中的语句不会继续执行,但是会继续执行下轮循环,循环体外的也会执行

package cn.susu.basic;

import java.util.Scanner;
/**本类用于测试break和continue,案例:找数字88*/
//需求:提示并接收用户输入100次数字,如果不是88,则继续输入
//找到88就结束
public class TsetBreakAndContinue {
	//1.创建入口函数
	public static void main(String[] args) {
		for(int i=0;i<=100;i++) {
			//3.提示并接收用户输入的数字
			System.out.println("请您输入要猜的数字:");
			int num= new Scanner(System.in).nextInt();
			if(num !=88){
				continue;//继续输入
				/**注意:不管加不加continue,都可以在猜不对的情况下继续输入
				 * 只是在加了continue后效率更高,只要数据不等于88,就无需执行循环后半部分代码
				 * 直接进行下一轮猜数字即可*/
				/**break和continue后都不允许写代码,都是不可到达的代码Unreachable code*/
			}
			System.out.println("我是用来测试continue有没有跳过后半部分代码的!!!");
			if(num==88) {
				System.out.println("恭喜您猜对了!");
				break;
			}
		}
	}
}

4.while 循环(格式)(先判断,再执行)

do while(循环先执行,再判断,循环体代码保证最少执行一次)

while(执行条件){
循环体;
}

do{
循环体;
}while(执行条件);

package cn.susu.basic;

import java.util.Random;
import java.util.Scanner;

/**本类用于联系while循环和do-while循环
 * 需求:产生一个随机数,与用户输入的数字作比较,直到用户才对*/

public class TestWhile_doWhile {
	//1.创建程序入口函数
	public static void main(String[] args) {
		int r=createNum();//调用生成随机数的方法,并且接受生成的随机数
		System.out.println("你猜我是几:");
//		guessNum1(r);
		guessNum2(r);
	}
	/**do-while*/
	public static void guessNum2(int r) {
		do {//先执行一次
			//提示并接收用户猜的数据
			System.out.println("大爷,来猜啊~");
			int input=new Scanner(System.in).nextInt();
			//判断用户是否猜对
			if(input>r) {
				System.out.println("猜大了,悠着点~");
			}else if(input<r) {
				System.out.println("猜小了,大胆点!");
			}else if(input==r) {
				System.out.println("厉害啊,猜对了!!!!我是:"+r);
				//一定要设置死循环的出口
				break;
			}
		}while(true);

	}
	/**while*/
	public static void guessNum1(int r) {
		//01.写一个死循环
		while(true) {/**死循环一定要设置程序的出口*/
			//02.接收用户输入的值
			System.out.println("你来猜我啊:");
			int input=new Scanner(System.in).nextInt();
			//03.判断用户是否猜对(拿用户输入的input与生成的随机数r作比较)
			if(input>r) {
				System.out.println("猜大了,悠着点~");
			}else if(input<r) {
				System.out.println("猜小了,大胆点!");
			}else if(input==r) {
				System.out.println("厉害啊,猜对了!!!!我是:"+r);
				break;
			}
		}
	}
	//2.创建一个用来生成随机数的方法                                         
	public static int createNum() {
		/**注意导包:java.util.Random
		 * 导包的快捷键:Ctrl+Shift+o*/
		/**参数100是自定义的,此时生成的随机数范围是[0,100)的整数*/
		int random=new Random().nextInt(100);
		return random;


	}

}

综合案例:ATM存取款机

package cn.susu.flow;

//模拟ATM机的运行
/*
 *需求:用户输入数字,根据用户数字,我们做相应的处理,在控制台显示相应的操作
 *1.查询
 *2.取款
 *3.存款
 *4.退出,结束错误
 *other:提示输入错误
 */
import java.util.Scanner;
import org.junit.Test;
public class ATM {
	@Test
	public void atm() {
		// 1.获取键盘输入
		Scanner scanner = new Scanner(System.in);// 得到系统监控设备,System.in输入设备(键盘)
		// 死循环,for(;;) 、while(true),要可以不断输入,直到按键退出
		while (true) {
			try {// 把可能出错的代码放入try中
				int n = scanner.nextInt();// 把键盘输入的内容转换成整数
				// 键盘监控,程序运行起来,程序处于阻塞(等待)状态
				//如果没有输入或者回车,程序就一直等待,等用户输入值回车之后,才会继续运行
				System.out.println("键盘输入" + n);
				// 多分支,只判断值,switch更加简洁
				switch (n) {
				case 1:
					System.out.println("查询");
					break;
				case 2:
					System.out.println("取款");
					break;
				case 3:
					System.out.println("存款");
					break;
				case 4:
					System.out.println("退出");
					return;// 结束程序,return更合适
				default:
					System.out.println("输入错误,请重新输入");
				}
			} catch (Exception e) {// 捕获异常,程序就不会报错了
				System.out.println("出错了:" + e.toString());
				break;//预防错误导致的死循环
			}
		}
	}
}

########################后面是帮助,非代码非文章部分#######################

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 [这儿][3],

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值