switch语句
当需要在几个固定的值中,选择一个种情况来执行,这个时候可以选择switch语句
int n=值; //n的值可能是下面的几种情况
switch(n){
case 值1:
语句体;
break;
case 值2:
语句体;
break;
...
default:
语句体;
break;
}
注意事项:
1)case后面的值不能重复
2)case后面的值只能是常量,不能是变量
3)switch表达式的数据类型,只能是固定的几种
byte short int char
JDK7以后可以是String
JDK5以后可以是枚举(后面学)
4)break是可以省略,但是会穿透
人品计算器,键盘录入学生的姓名,输出对应的人品。
import java.util.Scanner;
public class SwitchDemo{
public static void main(String[] args){
//1.键盘录入学生的姓名
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的姓名;");
//int num=sc.nextInt(); //输入整数
String name=sc.nextLine(); //字符串类型用String表示
System.out.println("你录入的姓名是:"+name);
//2.根据姓名,输出对应的人品
//把姓名转换为整数
int num=name.hashCode();
System.out.println(num);
//取整数的个位数
num=num%10;
//再对0~9进行匹配,计算对应的人品
switch(num){
case 0:
System.out.println("你的人品,非常差,不要靠近我");
break;
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穿透现象
//需求:键盘录入一个月份,输出对应的季节
/*
3、4、5 春季
6、7、8 夏季
9、10、11 秋季
12、1、2 冬季
*/
import java.util.Scanner;
public class SwitchDemo4{
public static void main(String[] args){
//键盘录入月份
Scanner sc=new Scanner(System.in);
System.out.println("键盘录入一个整数(月份)");
int month=sc.nextInt();
//对月份进行匹配
switch(month){
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;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("你录入的月份不正确");
break;
}
}
}
for循环
for循环的格式
for(初始化语句;条件判断;条件控制){
循环语句体;
}
...
执行流程:
1.初始化语句
2.条件判断
true: 继续执行第3步
false: 循环结束,执行for循环以后的语句
3.执行循环语句体;
4.条件控制
5.回到2步骤继续执行
案例1:循环打印输出10个HelloWorld
//循环打印输出10个HelloWorld
for(int i=1;i<=10;i++){
System.out.println(i+"....HelloWorld");
}
练习1:打印输出1~50之间的所有奇数
/*
思路:
1)循环1~50之间所有的整数
2)判断这个整数是否为奇数,如果是就打印
*/
for(int i=1;i<=50;i++){
//判断i是否为奇数
if(i%2!=0){
System.out.println(i);
}
}
练习2:打印输出1~50之间的所有偶数
/*
思路:
1)循环1~50之间所有的整数
2)判断这个整数是否为偶数,如果是就打印
*/
for(int i=1;i<=50;i++){
//判断i是否为偶数
if(i%2==0){
System.out.println(i);
}
}
求和案例
求和案例的思路
1)定义一个求和变量sum
2)遍历需要求和的数据,把这些数据和sum累加
3)最终sum就和所有数据的和
需求:求1~100之间所有整数的和
//1)定义一个求和变量sum
int sum=0;
//2)遍历需要求和的数据,把这些数据和sum累加
for(int i=1;i<=100;i++){
sum+=i;
}
//3)最终sum就和所有数据的和
System.out.println("1~100所有整数的和:"+sum);
需求:求1~100之间偶数的和
方法1
//定义一个求和变量
int sum = 0;
//循环1~100之间所有的整数
for(int i =1; i <= 100; i++){
//判断i这个数是否为偶数
if(i % 2 ==0){
sum += i;
}
}
System.out.println("1-100中所有偶数的和为:" + sum);
方法2
//定义一个求和变量
int sum = 0;
//循环1~100之间所有的偶数
for(int i =2; i <= 100; i+=2){
sum+=i;
}
System.out.println("1-100中所有偶数的和为:" + sum);
水仙花数
/*
什么是水仙花数:水仙花数是一个三位数,每一位数字的立方和等于该数本身
举例:153=1*1*1+5*5*5+3*3*3
思路:
1)遍历所有的三位数
2)获取每一个三位数的个位、十位、和百位
3)判断这个三位数数是否满足水仙花数的规则
这个数=个位*个位*个位+十位*十位*十位+百位*百位*百位
4)把满足条件的三位数打印数出来
*/
for(int i=100;i<=999;i++){
int ge=i%10;
int shi=i/10%10;
int bai=i/100%10;
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
System.out.println(i);
}
}
数据统计
涉及到数据统计的需求,一般都需要在循环之前定义一个计数器,在满足条件的情况下计数器累加。
//需求:打印1~100之间的整数,每5个换一行
int count=0; //计数器
for(int i=1;i<=100;i++){
System.out.print(i+" ");
count++;
//判断计数器是否为5的倍数
if(count%5==0){
System.out.println(); //换行
}
}
while循环
格式
初始化语句;
while(条件判断){
循环语句体;
条件控制;
}
执行流程:
1.初始化语句
2.条件判断
true: 继续执行第3步
false: 循环结束,执行for循环以后的语句
3.执行循环语句体;
4.条件控制
5.回到2步骤继续执行
while循环案例:打印输出10个HelloWorld
int i=1;
while(i<=10){
System.out.println(i+"...HelloWorld");
i++;
}
折纸问题
假设有一张足够大的纸0.1毫米,请问折叠多少次,可以到达珠穆朗玛峰的高度8844430毫米
/*
思路:
1.纸的初始化高度为0.1毫米
double h=0.1;
2.每次折叠厚度是原来的2倍
h*=2;
3.把折叠的过程循环执行,循环条件h<8844430
4.定义计数器来统计次数,每次折叠计数器累加
*/
//计数器
int count=0;
//初始化高度
double h=0.1;
//循环折叠的过程
while(h<8844430){
h*=2; //每次折叠厚度是原来的2倍
count++;
}
System.out.println("一共折叠:"+count+"次");
do…while循环
初始化语句;
do{
循环语句体;
条件控制语句
}while(条件判断);
特点:不管条件是否成立,循环语句体至少执行一次。
三种循环的区别
for、while与do...while的区别
for、while循环: 必须满足条件才执行
do...while: 不管条件是否成立,循环语句体至少执行一次。
for和while的区别
for循环:控制循环的变量,只能在循环里面使用
while循环:控制循环的变量,可以在循环外面使用
如何选择使用哪种循环
知道次数,选择使用for循环
不知道次数,选择使用while循环
死循环
循环条件一直为true的循环叫死循环(停不下来的循环就叫死循环)
for(;;){
System.out.println("黑马程序员");
}
while(true){
System.out.println("黑马程序员");
}
do{
System.out.println("黑马程序员");
}while(true);
注意:死循环下面的代码是执行不到的
跳转语句
break的使用场景
1)switch语句:遇到break结束,没有遇到break穿透
2)循环语句中:结束(中断,跳出)循环
continue使用场景
场景:只能在循环语句中使用
作用:结束本次循环,进入下一次循环
【带标号的跳出】:
当循环语句和switch语句嵌套时,break只能跳出单层循环或者switch. 如想跳出外层循环,必须给外层循环添加 一个标号,跳转到标号的位置。
wh:while(条件){
switch(表达式){
case 值:
//break; //跳出switch
break wh; //跳转到外层循环
...
}
}
使用跳转语句改写折纸问题
/*
思路:
1)使用死循环来做折纸的过程
h*=2;
2)每次折叠之后,判断是否到达珠峰的高度
如果到达:跳出循环
*/
//定义计数器
int count=0;
//初始化高度
double h=0.1;
while(true){
h*=2;
count++;
//每次折叠之后,判断是否到达珠峰的高度
if(h>=8844430){
break;
}
}
//打印计数器
System.out.println("一共折叠"+count+"次");
随机数
//1.导包
import java.util.Random;
//2.创建Random对象
Random r=new Random();
//3.生成指定范围的随机整数、
int num1=r.nextInt(10); //范围[0,9]
int num2=r.nextInt(11); //范围[0,10]
int num3=r.nextInt(10)+1; //范围[1,10]
int num4=r.nextInt(71)+50;//范围[50,120] -50 --> [0,70]+50 -->[50,120]
猜数字小游戏
生成一个[1,100]范围内的随机数,键盘录入猜这个数字是多少。如果小了,输出猜小了;如果大了,输出猜大了;如果相等,就输出猜中了。
/*
思路:
//1.生成一个[1,100]范围内的随机数
//2.键盘录入猜这个数字是多少
//3.比较录入的整数和随机数的大小
如果比随机数大:输出猜大了
如果比随机数小:输出猜小了
如果和随机数相同:输出猜中了
*/
import java.util.Random;
import java.util.Scanner;
public class GuessNum{
public static void main(String[] args){
//1.生成一个[1,100]范围内的随机数
Random r=new Random();
int num=r.nextInt(100)+1;
while(true){
//2.键盘录入猜这个数字是多少
Scanner sc=new Scanner(System.in);
System.out.println("请输入你猜的数字[1,100]:");
int myNum=sc.nextInt();
//3.比较录入的整数和随机数的大小
if(myNum>num){
System.out.println("猜大了");
}else if(myNum<num){
System.out.println("猜小了");
}else{
System.out.println("猜中了");
break; //猜中了,就不猜了。
}
}
}
}