循环与分支
-
分支语句switch语句
- 格式:
switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+1; break; }
-
说明:
-
执行流程:
-
case穿透:如果switch语句中,case省略了break语句,就会开始case穿透,当开始case穿透,后续的case就不会具有匹配效果,内部的语句都会执行,直到看见break,或者将整体switch语句执行完毕,才会结束。
-
import java.util.Scanner; public class Day03{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.print("请输入:"); int week = sc.nextInt(); switch(week){ case 1: case 2: case 3: case 4: case 5: System.out.println("工作日"); break; case 6: case 7: System.out.println("休息日 "); break; default: System.out.println("输入有误!"); break; } } }
-
-
示例:
import java.util.Scanner;
public class Day03{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入:");
int week = sc.nextInt();
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;
}
}
}
- 循环语句for循环
- 格式:for(初始化语句;条件判断语句;条件控制语句){循环体语句;}
- 执行流程:1.执行初始化语句 2.执行条件判断语句,看其结果是true还是false,如果是false循环结束;如果是true继续执行,3.执行循环体语句 4.执行条件控制语句,回到2继续。
示例:
import java.util.Scanner;
public class Day03{
public static void main(String[] args){
for(int i=5;i<=10;i++){
System.out.print(i+" ");
}
System.out.println("\n"+"-----------------");
for(int i=10;i>=5;i--){
System.out.print(i+" ");
}
}
}
结果:
案例水仙花数:
需求:在控制台输出所有的"水仙花数",水仙花数是一个三位数,水仙花数的个位、十位、百位的数字的立方和等于原数。
public class Day03{
public static void main(String[] args){
for(int i=100;i<=999;i++){
int ge = i%10; //得出个位的数字
int shi = i/10%10; //得出十位的数字
int bai = i/100%10; //得出百位的数字
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai; //得出个位、十位、百位的数字立方和
if(i==sum){
System.out.print(sum+" ");
}
}
}
}
结果:
- while循环语句
- 格式:while(条件判断语句){循环体语句;条件控制语句;}
- 执行流程:1.执行条件判断语句,看其结果是true还是false,若是false,循环结束;若是true,继续执行;2.执行循环体语句;3.执行条件控制语句;4.回到1继续。
案例:水仙花数进阶
public class Day03{
public static void main(String[] args){
int i=100;
int count=0;
while(i<=999){
int ge = i%10;
int shi = i/10%10;
int bai = i/100%10;
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
if(i==sum){
System.out.print(sum+" ");
count++;
if(count%2==0){
System.out.println();
}
}
i++;
}
}
}
结果:
案例:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
public class Day03{
public static void main(String[] args){
double paper=0.1;
int count=0;
int zf=8844430;
while(paper<=zf){
count++;
paper *= 2;
}
System.out.print("纸张共折叠"+count+"次。");
}
}
结果:
-
do…while循环
-
格式:do{循环体语句;条件控制语句;}while(条件判断语句);
-
执行流程:
-
特点:无论循环条件是否满足,都至少会执行一次循环体。
-
-
三种循环的区别:
-
跳转控制语句
- continue:跳过某次循环,继续执行下一次循环;
- break:终止循环。
案例:打印1~99层所有不带4的楼层;
public class Day03{
public static void main(String[] args){
int i=1;
while(i<=99){
int ge = i%10;
int shi = i/10%10;
i++;
if(ge==4 | shi==4){
continue;
}
System.out.print("第"+(i-1)+"层;");
}
}
}
结果:
- Random:产生随机数
- 导包:import java.util.Random;
- 创建对象:Random r = new Random();
- 获取随机数:int number = r.nextInt(10); //获取数据的范围:[0,10) 包括0,不包括10;
示例:
import java.util.Random;
public class Day03{
//输出22~88之间的随机数
public static void main(String[] args){
Random r = new Random();
for(int i=1;i<=10;i++){
int s = r.nextInt(67)+22; //加的数由范围的左端决定,括号中的数由范围两端的差值决定
System.out.println(s);
}
}
}
结果:
案例:猜数字;
import java.util.Random;
import java.util.Scanner;
public class Day03{
public static void main(String[] args){
Random r = new Random();
Scanner sc = new Scanner(System.in);
int randomNum = r.nextInt(100)+1;
while(true){
System.out.print("请输入你猜的数据(0~100之间):");
int guess = sc.nextInt();
if(guess>randomNum){
System.out.println("猜大了!");
}else if(guess<randomNum){
System.out.println("猜小了!");
}else{
System.out.println("恭喜你猜对了!");
break;
}
}
System.out.println("欢迎下次使用!");
}
}
结果:
练习1
需求:某商场实行新的抽奖规则:如果会员号(四位数)的百位数字等于产生的随机数字(随机数为0~9),则该会员为幸运会员,且实现以下要求:从键盘上接收会员号,使用if-else选择结构实现幸运抽奖。
import java.util.Random;
import java.util.Scanner;
public class Day03{
public static void main(String[] args){
Random r = new Random();
Scanner sc = new Scanner(System.in);
int randomNum = r.nextInt(10);
System.out.print("请输入你的会员号(四位):");
int vc = sc.nextInt();
int bai = vc/100%10;
if(randomNum==bai){
System.out.println("恭喜!您是幸运会员!");
System.out.println("幸运数字为:"+randomNum);
}else{
System.out.println("抱歉!您不是幸运会员!");
System.out.println("幸运数字为:"+randomNum);
}
}
}
结果:
练习2
需求:在中国历法中有十二生肖年份,2019年是己亥猪年,请在控制台输出从1949年(包含)到2019年(包含)中所有是猪年的年份。
/*
经分析得出2019减去指定年份所得结果是12的倍数,则该年份为猪年。
*/
public class Day03{
public static void main(String[] args){
for(int year=1949;year<=2019;year++){
int pass = 2019-year;
if(pass%12==0){
System.out.print(year+" ");
}
}
}
}
结果:
练习3
需求:假如某店铺搞推销活动,对前100个进店消费的客户都下发一个号码牌(1–100号),如果用户手中的号码牌是8的倍数,那么该客户就可以以号码牌数字的价格购买电风扇一台(例如8号客户8元即可购买,16号客户16元即可购买…以此类推),如果该商场今天刚好来了100个客户,请问该店铺今天一共卖出了多少台打折的风扇,这些打折的风扇总共卖了多少钱?
/*
经分析得出卖出的电风扇数就是1~100中是8的倍数的个数,卖的钱数就是这写8的倍数的数字之和
*/
public class Day03{
public static void main(String[] args){
int count = 0;
int price = 0;
for(int i=1;i<=100;i++){
if(i%8==0){
count++;
price += i;
}
}
System.out.println("店铺共卖出"+count+"台电风扇。");
System.out.println("这些打折的风扇总共卖了"+price+"元。");
}
}
结果:
练习4
需求:循环录入某学生的5门课程的成绩并计算平均分。如果某分数录入为负,则停止录入并提示录入错误。
import java.util.Scanner;
public class Day03{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double sum = 0;
double score = 0;
for(int i=1;i<=5;i++){
System.out.print("请输入第"+i+"门课的成绩:");
score = sc.nextDouble();
if(score<0){
System.out.println("成绩录入错误!");
break; //成绩录入错误!终止循环录入
}
sum += score;
}
if(score>=0){
double avg = sum/5; //判断成绩是否录入错误,如果录入错误则不执行求平均值和输出
System.out.println("五门成绩的平均分为:"+avg);
}
}
}
结果: