小白入门编程之路3:流程控制语句

流程控制语句

一.switch语句

1.switchy语句的格式执行流程

◆格式:

switch(表达式){
        case1:
            语句体1;
            break;
        default:
            语句体n+1;
            break;
     }

◆switch中break的作用
用于结束整个switch语句的执行
◆switch中default的执行时机
当表达式的值,和case给出的值,都没有匹配成功,将会执行default
◆switch括号中的表达式可以接收的类型
byte,short,int,char,jdk5开始可以接收枚举,jdk7开始可以接收String

2.case穿透

◆switch中省略了break的现象
如果switch匹配到了对应的case,但是当前case中没有遇到break,这时候代码会不再进行其他的case匹 配,继续向下执行,一直到switch所有语句执行完毕,或者中途遇到了break,才会结束,这种现象,我
们称之为case穿透。

/*
运用switch语句编写不同季节对应的月份
1、2、12月份输出   冬季
3、4、5月份输出    春季
6、7、8月份输出    夏季
9、10、11月份输出  秋季
*/
import java.util.Scanner; //导包
public class SwitchDemo{
	public static void main(String[] args){
		System.out.println("开始");
		Scanner sc = new Scanner(System.in); //创建Scanner对象
		System.out.println("请输入一个月份(1-12)");
		int month = sc.nextInt();
		switch(month){
			case 1:
			case 2:
			case 12:
				System.out.println("冬季"); //输入1、2、12会输入冬季
				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("你输入的月份有误");
		}
		System.out.println("结束");
	}
}
控制台输出:
请你输入一个的月份(1-12)
12
冬季

二.for结构

1.for语句的组成格式

格式 : for(初始化语句; 条件判断语句; 条件控制语句){
循环体语句;
}
初始化语句:对控制循环的变量进行初始化
条件判断语句:控制循环体是否要执行的判断条件
循环体语句:循环中要做的事情
条件控制语句:对控制循环的变量进行改变,也就是控制循环的进度

2.for语句的执行流程

①. 执行初始化语句,该语句只会执行一次
②. 执行条件判断语句,例如 i <= 5,看其返回结果是true还是false,如果为false,结束循环,如果为true,	则执行循环体语句
③. 当条件为true的时候,执行循环体语句
④. 执行条件控制语句,改变控制循环的变量,例如i++; 随后继续执行条件判断语句,以此类推 

3. 案例

3.1for循环输出数据

◆使用for循环输出1-5
◆使用for循环输出5-1
案例:
定义for循环,初始化变量i为1,循环判断条件为 i <= 5,循环体内部打印变量i,随后i++;
定义for循环,初始化变量i为5,循环判断条件为 5 >= 1,循环体内部打印变量i,随后i--; 
public class ForTest01{
	public static void main(String[] args){
		for(int a=1; a<=5; a++){
			System.out.print(a+"\t");
		}
		System.out.println();
		for(int b=5; b>=1; b--){
			System.out.print(b+"\t");
		}	
	}
}
控制台输出:
1 2 3 4 5
5 4 3 2 1

3.2 for循环求和

◆定义求和变量sum,准备用于数据的累加
◆使用for循环,控制数据从1开始增长到5
◆循环的过程中,使用数据跟sum累加即可

案例:

public class ForTest01{
	public static void main(String[] args){
		int num = 0;
		for(int a=1; a<=5; a++){
			num += a;
		}
		System.out.println(num)
	}
}
控制台输出:
15

3.3 循环语句求奇数的和

◆定义求和变量sum,准备用于数据的累加
◆使用for循环,控制数据从1开始增长到100
◆循环的过程中,使用if语句判断当前数值是否是奇数
◆如果是偶数,跟sum变量累加即可

案例:①求1-100的数字之和
public class ForTest02{
	public static void main(String[] args){
		int num = 0;
		for(int a=100; a>=1; a--){
			if(a % 2 !=0){
			num += a
			}
		}
		System.out.println("1-100奇数的和:"+num);
	}
}
控制台输出:
2500
案列:②
1、什么是水仙花数?想找出水仙花数,循环该怎么设计?
 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数,例如153
 3*3*3 + 5*5*5 + 1*1*1 = 153
 从三位数中筛选,就要找出所有的三位数,所以循环该从最小的三位数100开始,循环到最大的三位数999
2、怎样获取一个三位数的个位,十位,百位?
将循环中获取到的每一个数值,使用num变量记录
num % 10 得到个位
num / 10 % 10 得到十位
num / 10 / 10 % 10 得到百位
3.统计个数 定义一个变量s=0;利用for循环if判断如果是水仙花则s++,最后输出s即可
public class ForTest04{
	public static void main(String[] args){
		int s = 0;
		for(int i=100; i<1000; i++){
			int ge = i % 10;
			int bai = i / 100;
			int shi = i / 10 % 10;
			int num = ge*ge*ge + shi*shi*shi + bai*bai*bai;
			if(num == i){
				System.out.println(i);
				s++;
			}
		}
		System.out.println("100到1000之间的水仙花数一共有:" + s +"个");
	}
}
控制台输出:
153
370
371
407
1001000之间的水仙花数一共有:4

三.循环语句-while结构

1、while循环的完整格式

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

2.while循环的执行流程

 1. 执行初始化语句(程序从上到下执行,也必须先执行这一句)
 2. 执行条件判断语句,看其结果是true还是false,false的话结束循环,true的话则向下继续执行
 3. 循环条件满足,执行循环体语句(循环真正做的事情)
 4. 执行条件控制语句
 5. 继续执行条件判断语句,看其返回结果是true,还是false…以此类推
	案例①
 用while语句打印5次HelloWorld
 思路:
 编写初始化语句int i= 1;
 定义while循环格式,条件判断语句 i <=5;  循环体语句打印HelloWorld
 循环体语句下面,编写条件控制语句i++;
public class WhileDemo{
	public static void main(String[] args){
		int a = 1;
		while(a<=5){
			System.out.print("HelloWorld");
		}	
	}
}
控制台输出:
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
案例②
动动手,使用while循环计算出0.1毫米的纸,折多少次可以折成珠穆朗玛峰的高度(8844.43米)
思路:
◆定义计数器变量,准备用于统计次数
◆定义纸张的厚度,和珠穆朗玛峰的高度,注意单位换算
◆编写while循环的判断条件,当纸张厚度小于等于珠穆朗玛峰的高度,说明循环可以继续,循环内部纸张*=2
◆循环中每一次折完,计数器增长一次,循环结束后打印计数器
public class WhileTest01{
	public static void main(String[] args){
		double paper = 0.1;
		int count = 0;
		int zf = 8844430;
		while(paper <= zf){
			paper *= 2;
			count++;
		}
		System.out.println("折叠次数:" + count);
	}
}
控制台输出:
折叠次数:27

四.do…while循环结构

1、do…while循环的完整格式

do { 
          循环体语句;
          条件控制语句;
      } while(条件判断语句);

2、do…while循环的特点是

按照顺序,程序从上到下依次执行,do…while循环会先执行循环体语句,随后再执行条件判断语句,由此得出结论, do…while循环,无论条件是否满足,都至少执行一次循环体。

五.三种循环的区别

1、for循环和while循环,是先判断后执行。
2、do…while循环是先执行后判断
3、for循环和while循环的区别
for循环内部定义的变量,在循环之后就会从内存中释放掉,再想使用就找不到了,而while控制循环的变量是定义 在循环外部,循环结束后可以继续使用。(也可以将for循环的初始化语句定义在循环外部)
4、死循环的三种书写格式是?哪一种最常用?
格式:for(;{} while(true){} do{}while(true);
常用:while(true){}

六.跳转控制语句continur和break

1、break的应用范围
break可用于switch语句中,也可以用于循环语句,三种循环都可以
break用于打破循环,如果执行了break这个循环就就停止结束
2、continue的应用范围
continue只能应用在循环中!并且continue用来结束本次循环,然后接着执行后续循环
案例
需求:控制台输出1-5,打印的过程中,不要2的倍数
运行结果(一行打印,中间有空格分割):1 3 5
思路:
定义for循环,循环从1开始,循环到10
循环中使用if判断,当前的数%3==0吗?如果满足条件,是3的倍数,continue跳过即可
如果不是3的倍数,使用System.out.print()打印数据,并拼接空格字符串

public class ContinueTest01{
	public static void main(String[] args){
		for(int i = 1; i<=5; i++){
			if(i%2 == 0){
				continue;
			}
			System.out.print(i + "\t");
		}
	}
}
控制台输出:
1 3 5
public class ContinueTest01{
	public static void main(String[] args){
		for(int i = 1; i<=5; i++){
			if(i%2 == 0){
				break;
			}
			System.out.print(i + "\t");
		}
	}
}
控制台输出:
1

七.嵌套循环

案例代码:

public class ForFor{
	public static void main(String[] args){
		for(int hour=0; hour <24; hour++){
			for(int minute=0; minute<60; minute++){
				System.out.println(hour + "时" + minute + "分");
			}
			System.out.println("--------");
		}
	}
}

循环嵌套的执行步骤
外循环执行一次,内循环执行一圈
简单理解:整个内循环,就是外循环所控制的循环体,循环体没有执行完,是不会开始下一次循环的。
(红色部分为内循环)

八.Random

1、Random的使用步骤

 A.  导入包  import java.util.Random;
 B.  创建对象  Random r = new Random();
 C.  获取随机数  r.nextInt(10);   // 10是举例,不是固定写法

2、案例

如果nextInt方法中传入的是20,则产生的随机数是多少产生的是0-19,如果想要产生1-20的随机数,需要手动修改

int num = r.nextInt(20) + 1;

案例
用Random随机生成2个30-50之间的数(包括30和50)

import java.util.Random;
public class RandomTest{
	public static void main(String[] args){
		Random r = new Random();
		for(int i = 1; i<=2; i++){
			int count = r.nextInt(21) + 30;
			System.out.println("第" + i + "个随机数是:" + count);
		}
		System.out.println("------");
		
	}
}
控制台输出:
第1个随机数是:342个随机数是:46
(结果是随机的)

案例
需求:程序开始随机产生1-100之间的随机数,随后使用键盘录入的数值和产生的随机数进行比对,如果没猜中, 给出提示大了或笑了,猜中了提示恭喜
思路:
◆创建Random对象,并产生一个1-100之间的随机数
◆使用Scanner,键盘录入一个整数,使用if语句,跟产生的随机数进行比较,并给出相应的提示
◆使用无限循环将(键盘录入并比对)的代码包裹,猜中了之后,break结束循环

import java.util.Random;
import java.util.Scanner;
public class Guess{
	public static void main(String[] args){
		Random r = new Random();
		int x = r.nextInt(100)+1;
		while(true){
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入你猜的数据:");
			
			int y = sc.nextInt();
			if(y > x){
				System.out.println("你猜的数字大了");
			}else if(y < x){
				System.out.println("你猜的数字小了");
			}else{
				System.out.println("恭喜你猜对了!");
				break;
			}
			
		}
	}
}

你可能感兴趣的:(java)