传智播客Java switch和循环

目录

和C都一样

switch

for

while

do while

循环嵌套

循环跳转


switch

/*
	switch语句格式:
		switch(表达式) {
			case 值1:
				语句体1;
				break;
			case 值2:
				语句体2;
				break;
			...
			default:
				语句体n+1;
				break;
		}
		
	格式的解释:
		switch:表示这是switch选择结构
		表达式:这个地方的取值是有限定的
			byte,short,int,char
			JDK5以后可以是枚举
			JDK7以后可以是字符串
		case:后面跟的是要和表达式进行比较的值
		语句体:要执行的代码
		break:表示中断,结束的意思,可以控制switch语句的结束。
		default:当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。
	
	面试题:
		byte可以作为switch的表达式吗?
		long可以作为switch的表达式吗?
		String可以作为switch的表达式吗?
		
	案例:
		键盘录入一个数据,根据这个数据,我们输出对应的星期?
			键盘录入1,对应输出星期一
			键盘录入2,对应输出星期二
			...
			键盘录入7,对应输出星期日
			
	分析:
		1:键盘录入,用Scanner实现
		2:判断我们既可以使用if语句,也可以使用我们要讲解的switch语句
		
	注意:
		A:遇到左大括号缩进一个tab的位置。
		B:关联不是很大的语句间空行
*/
import java.util.Scanner;

class SwitchDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//控制键盘录入数据
		System.out.println("请输入一个数据(1-7):");
		int week = sc.nextInt(); //3
		
		//switch判断语句
		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:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("你输入的数据有误");
				break;
		}
	}
}

 

/*
	switch语句的注意事项:
		A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
		B:default可以省略吗?
			可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
			特殊情况:
				case就可以把值固定。
				A,B,C,D
		C:break可以省略吗?
			可以省略,但是结果可能不是我们想要的。
			会出现一个现象:case穿透。
			最终我们建议不要省略
		D:default一定要在最后吗?
			不是,可以在任意位置。但是建议在最后。
		E:switch语句的结束条件
			a:遇到break就结束了
			b:执行到末尾就结束了
*/
import java.util.Scanner;

class SwitchDemo2 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//控制键盘录入数据
		System.out.println("请输入一个数据(1-7):");
		int week = sc.nextInt(); //3
		
		//定义常量
		//int number = 3;
		//然后把case后面的值改为number,就会报错
		
		//switch判断语句
		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:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("你输入的数据有误");
				//break;
		}
	}
}
/*
	模拟单项选择题。
	
	分析:
		A:出一个选择题,然后供你选择。
		B:键盘录入选择的数据。
		C:根据选择来给出你选择的结论。
*/
import java.util.Scanner;

class SwitchTest2 {
	public static void main(String[] args) {
		//出一个选择题,然后供你选择。
		//由于我们现在没有办法键盘录入得到一个'A','B'
		//这样的东西,我就用65,66这样的值替代
		//将来我们获取到这样的值以后,强制转换为字符类型
		System.out.println("下面的几个人你最爱谁?");
		System.out.println("65 林青霞");
		System.out.println("66 张曼玉");
		System.out.println("67 刘德华");
		System.out.println("68 王力宏");
		
		//键盘录入选择的数据。
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入你的选择:");
		int choiceNumber = sc.nextInt();
		
		//强制转换为字符类型
		char choice = (char) choiceNumber;
		
		switch(choice) {
			case 'A':
				System.out.println("恭喜你,选择正确");
				break;
			case 'B':
				System.out.println("不好意思,你选择有误");
				break;
			case 'C':
				System.out.println("不好意思,你选择有误");
				break;
			case 'D':
				System.out.println("不好意思,你选择有误");
				break;
			default:
				System.out.println("没有该选项");
				break;
		}
	}
}

 

 

/*
	根据你键盘录入的字符串,判断是否有满足要求的,如果有就输出。
	否则,提示有误。
	
	String s = sc.nextLine();
*/
import java.util.Scanner;

class SwitchTest3 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//录入数据
		System.out.println("请输入你要判断的字符串:");
		String s = sc.nextLine();
		
		switch(s) {
			case "hello":
				System.out.println("你输入的是hello");
				break;
			case "world":
				System.out.println("你输入的是world");
				break;
			case "java":
				System.out.println("你输入的是java");
				break;
			default:
				System.out.println("没有找到你输入的数据");
				//break;
		}
	}
}
/*
	用switch语句实现键盘录入月份,输出对应的季节
	
	分析:
		A:键盘录入一个月份,用Scanner实现
		B:用switch语句实现即可
		
	if语句和switch语句的区别?
		if语句:
			A:针对结果是boolean类型的判断
			B:针对一个范围的判断
			C:针对几个常量值的判断
		
		switch语句:
			针对几个常量值的判断
*/
import java.util.Scanner;

class SwitchTest4 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//录入数据
		System.out.println("请输入月份(1-12):");
		int month = sc.nextInt();
		
		/*
		switch(month) {
			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:
				System.out.println("夏季");
				break;
			case 7:
				System.out.println("夏季");
				break;
			case 8:
				System.out.println("夏季");
				break;
			case 9:
				System.out.println("秋季");
				break;
			case 10:
				System.out.println("秋季");
				break;
			case 11:
				System.out.println("秋季");
				break;
			case 12:
				System.out.println("冬季");
				break;
			default:
				System.out.println("你输入的月份有误");
		}
		*/
		
		//这样写太麻烦了,我们使用一个我们不想使用的东西:case穿透
		switch(month) {
			case 1:
			case 2:
			case 12:
				System.out.println("冬季");
				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("你输入的月份有误");
		}
	}
}

for

/*
	需求:
		A:求1-100之和。
		B:求出1-100之间偶数和
		C:求出1-100之间奇数和(自己做)
*/
class ForDemo4 {
	public static void main(String[] args) {
		//求1-100之和。
		int sum1 = 0;
		
		for(int x=1; x<=100; x++) {
			sum1 +=x;
		}
		
		System.out.println("1-100之和是:"+sum1);
		System.out.println("------------------");
		
		//求出1-100之间偶数和
		//方式1
		int sum2 = 0;
		
		for(int x=1; x<=100; x++) {
			if(x%2 == 0) {
				sum2 += x;
			}
		}
		
		System.out.println("1-100偶数之和是:"+sum2);
		System.out.println("------------------");
		
		//方式2
		int sum3 = 0;
		
		for(int x=0; x<=100; x+=2) {
				sum3 += x;
		}
		
		System.out.println("1-100偶数之和是:"+sum3);
		System.out.println("------------------");
	}
}

 

while

/*
	练习:用while循环实现
	左边:求出1-100之和
	右边:统计水仙花数有多少个
	
	初始化语句;
	while(判断条件语句) {
		 循环体语句;
		 控制条件语句;
	}
	
	
	
	for(初始化语句;判断条件语句;控制条件语句) {
		循环体语句;
	}

*/
class WhileDemo2 {
	public static void main(String[] args) {
		//求出1-100之和
		//for语句版本
		int sum = 0;
		
		for(int x=1; x<=100; x++) {
			sum+=x;
		}
		
		System.out.println("sum:"+sum);
		System.out.println("--------");
		//while语句版本
		int sum2 = 0;
		
		int y=1;
		while(y<=100) {
			sum2+=y;
			y++;
		}
		
		System.out.println("sum2:"+sum2);
		System.out.println("--------");
	}
}

 

/*
	我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
	请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

	分析:
		A:定义一个统计变量,默认值是0
		B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度
		  我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
		C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
		  折叠一次有什么变化呢?就是厚度是以前的2倍。
		D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
		E:输出统计变量。
*/

class WhileDemo5 {
	public static void main(String[] args) {
		//定义一个统计变量,默认值是0
		int count = 0;
		
		//最高山峰是珠穆朗玛峰:8848m这是最终的厚度
		//我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
		//为了简单,我把0.01变成1,同理8848就变成了884800
		int end = 884800;
		int start = 1;
		
		while(start<end) {
			//只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
			count++;
			
			//折叠一次有什么变化呢?就是厚度是以前的2倍。
			start *= 2;
			
			System.out.println("第"+count+"次厚度是"+start);
		}
		
		//输出统计变量。
		System.out.println("要叠"+count+"次");
	}
}

do while

/*
	do...while循环的基本格式:
		do {
			循环体语句;
		}while(判断条件语句);
		
		扩展格式;
		初始化语句;
		do {
			循环体语句;
			控制条件语句;
		}while(判断条件语句);
*/
class DoWhileDemo {
	public static void main(String[] args) {
		//输出10次HelloWorld。
		int x = 0;
		do {
			System.out.println("HelloWorld");
			x++;
		}while(x<10);
		
		System.out.println("--------------");
		
		//求和1-100
		int sum = 0;
		int a = 1;
		do {
			sum += a;
			a++;
		}while(a<=100);
		
		System.out.println(sum);
	}
}

 

循环嵌套

 

/*
	需求:请输出一个4行5列的星星(*)图案。
	结果:
		*****
		*****
		*****
		*****
		
	循环嵌套:就是循环语句的循环体本身是一个循环语句。
	
	通过结果我们知道这样的一个结论:
		外循环控制行数
		内循环控制列数
*/
class ForForDemo {
	public static void main(String[] args) {
		//原始做法
		System.out.println("*****");
		System.out.println("*****");
		System.out.println("*****");
		System.out.println("*****");
		System.out.println("-------------");
		
		//虽然可以完成需求,但是不是很好
		//如果是多行多列就会比较麻烦
		//所以我们准备改进
		//如何改进呢?
		//我先考虑如何实现一行*的问题
		//System.out.println("*****");
		//我们要想的是如何实现一次输出一颗*的问题
		//System.out.println("*");
		//System.out.println("*");
		//现在虽然可以一次一颗*,但是却换行了,我要求不能换行,怎么办呢?
		//输出语句的另一种格式:System.out.print(); 这个是不带换行的
		//System.out.print("*");
		//System.out.print("*");
		//System.out.print("*");
		//System.out.print("*");
		//System.out.print("*");
		//如果我要在一行上打出多颗*,比较麻烦,而代码是重复的,所以我决定用循环改进
		for(int x=0; x<5; x++) {
			System.out.print("*");
		}
		//我们可以通过空的输出语句实现换行:System.out.println();
		System.out.println();
		
		//既然我可以打出一行,我就可以打出第二行
		for(int x=0; x<5; x++) {
			System.out.print("*");
		}
		//我们可以通过空的输出语句实现换行:System.out.println();
		System.out.println();
	
		//同理打出第三行,第四行
		for(int x=0; x<5; x++) {
			System.out.print("*");
		}
		//我们可以通过空的输出语句实现换行:System.out.println();
		System.out.println();
		
		//既然我可以打出一行,我就可以打出第二行
		for(int x=0; x<5; x++) {
			System.out.print("*");
		}
		//我们可以通过空的输出语句实现换行:System.out.println();
		System.out.println();
		System.out.println("-----------------");
		//同样的代码出现了4次,说明我们程序写的不好,用循环改进
		for(int y=0; y<4; y++) {
			for(int x=0; x<5; x++) {
				System.out.print("*");
			}
			//我们可以通过空的输出语句实现换行:System.out.println();
			System.out.println();
		}
	}
}

 

/*
	需求:请输出下列的形状
		*
		**
		***
		****
		*****
*/
class ForForDemo2 {
	public static void main(String[] args) {
		//通过简单的观察,我们看到这是一个行是5,列数是变化的形状
		//我们先打印出一个5行5列的形状
		for(int x=0; x<5; x++) {
			for(int y=0; y<5; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
		System.out.println("--------------");
		
		//我们实现了一个5行5列的形状
		//但是这不是我们想要的
		//我们要的是列数变化的
		//列数是如何变化的呢?
		//第一行:1列	y=0,y<=0,y++
		//第二行:2列	y=0,y<=1,y++
		//第三行:3列	y=0,y<=2,y++
		//第四行:4列	y=0,y<=3,y++
		//第五行:5列	y=0,y<=4,y++
		//在看外循环x的变化,恰好就是x=0,1,2,3,4
		//所以这个最终版的程序就是如下
		for(int x=0; x<5; x++) {
			for(int y=0; y<=x; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
/*
	需求:在控制台输出九九乘法表。
	
	首先我们写出九九乘法表:
		1*1=1
		1*2=2	2*2=4
		1*3=3	2*3=6	3*3=9
		1*4=4	2*4=8	3*4=12	4*4=16
		...
		1*9=9	2*9=18	3*9=27	...
		
	我们先把这个九九乘法表看出是这样的一个形状:
		*
		**
		***
		****
		*****
		******
		*******
		********
		*********
		
	注意:
		'\x' x表示任意,这种做法叫转移字符。
		
		'\t'	tab键的位置
		'\r'	回车
		'\n'	换行
*/
class ForForDemo3 {
	public static void main(String[] args) {
		for(int x=0; x<9; x++) {
			for(int y=0; y<=x; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("--------------");
		//为了使用数据,我们从1开始
		for(int x=1; x<=9; x++) {
			for(int y=1; y<=x; y++) {
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();
		}
	}
}

循环跳转

package com.company;
import java.util.Scanner;

public class JavaLearn {

    public static void main(String[] args)
    {

        //每天要存储的钱是2.5元
        double dayMoney = 2.5;

        //存钱的初始化值是0
        double daySum = 0;

        //从第一天开始存储
        int dayCount = 1;

        //最终存储不小于100就不存储了
        int result = 100;

        //因为不知道是多少天,所以我用死循环,
        while(true) {
            //累加钱
            daySum += dayMoney;

            //一旦超过100元我就退出循环。
            if(daySum >= result) {
                System.out.println("共花了"+dayCount+"天存储了100元");
                break;
            }

            if(dayCount%5 == 0) {
                //花去6元钱
                daySum -= 6;
                System.out.println("第"+dayCount+"天花了6元钱");
            }

            //天数变化
            dayCount++;
        }




    }

}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值