流程控制语句:顺序结构、分支结构、循环结构
顺序结构
public class KV{
public static void main(String[] args){
System.out.println("a");
System.out.println("b");
System.out.println("c");
System.out.println("d");
}
}
分支结构:判断if和选择switch
switch和if第三种格式各自的使用场景
- if语句:用于对范围的判断
- switch语句:用于把有限个数据一一列举出来,让我们任选其一
if语句
- 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号里
//格式1
public class KV{
public static void main(String[] args){
if(关系表达式){
语句体1;
}else{
语句体2;
}
}
}
//格式2
public class KV{
public static void main(String[] args){
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
...
else{
语句体n+1;
}
}
}
格式1练习:影院选座
假设某影院卖了100张票,序号为1~100,奇数坐在左边,偶数坐在右边
import java.util.Scanner;
public class KV{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的票号");
int ticket = sc.nextInt();
if(ticket>=1&&ticket<=100){
if((ticket%2)==1){
System.out.println("请您坐在左边");
}else{
System.out.println("请您坐在右边");
}
}else{
System.out.println("您输入的票号无效");
}
}
}
格式2练习:商品价格
某商场由VIP会员制,根据不同的会员会有不同的折扣
假设商品总价为1000,键盘录入会员级别,并计算出实际支付的钱
会员1级:打9折
会员2级:打8折
会员3级:打7折
非会员:不打折
import java.util.Scanner;
public class KV{
public static void main(String[] args){
int price = 1000;
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的会员级别");
int level = sc.nextInt();
if(level>=1){
if(level==1){
System.out.println("实际支付的金额为"+(price*0.9));
}else if(level==2){
System.out.println("实际支付的金额为"+(price*0.8));
}else if(level==3){
System.out.println("实际支付的金额为"+(price*0.7));
}
}else{
System.out.println("实际支付的金额为"+price);
}
}
}
switch语句
格式说明:
- 表达式:(将要匹配的值)取值为byte、short、int、char。 JDK5以后可以是枚举,JDK7以后可以是String。
- case: 后面跟的是要和表达式进行比较的值(被匹配的值)
- break:表示终端,结束的意思,用来结束switch语句。
- default:表示所有情况都不匹配时,就执行该处的内容,和if语句的else相似。
- case后面是值只能是字面量,不能是变量
- case给出的值不允许重复
- default的位置:任意位置,习惯最下面
public class KV{
public static void main(String[] args){
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
}
}
示例:
public class KV{
public static void main(String[] args){
String noodles = "兰州拉面";
switch(noodles){
case "兰州拉面":
System.out.println("吃兰州拉面");
break;
case "武汉热干面":
System.out.println("吃武汉热干面");
break;
case "北京炸酱面":
System.out.println("吃北京炸酱面");
break;
case "陕西油泼面":
System.out.println("吃陕西油泼面");
break;
default:
System.out.println("吃泡面");
break;
}
}
}
switch新特性:用->代替break(JDK12)
public class KV{
public static void main(String[] args){
String noodles = "兰州拉面";
switch(noodles){
case "兰州拉面" -> System.out.println("吃兰州拉面");
case "武汉热干面"-> System.out.println("吃武汉热干面");
case "北京炸酱面"-> System.out.println("吃北京炸酱面");
case "陕西油泼面"-> System.out.println("吃陕西油泼面");
default -> System.out.println("吃泡面");
}
}
}
case穿透:省略break会导致后面所有case都打印出来直至遇到break或者右大括号
应用场景:如果多个case的语句体重复了,那么我们可以考虑使用case穿透去简化代码
练习:休息日和工作日
需求:键盘录入星期数,输出工作日、休息日
(1-5)工作日,(6-7)休息日
import java.util.Scanner;
public class KV{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前星期数");
String day = sc.nextLine();
switch(day){
case "1":
case "2":
case "3":
case "4":
case "5":
System.out.println("Weekday");
break;
case "6":
case "7":
System.out.println("Weekend");
break;
default:
System.out.println("没有这天");
break;
}
}
}
循环结构
- for
- while
- do...while
for和while循环
- 相同点:运行规则一样
- 区别:
- for循环中,控制循环的变量,因为是归属于for循环的语法结构,在for循环结束后,就不能再次被访问了。(知道循环次数或者循环范围i的时候使用)
- while循环中,控制循环的变量,对于while循环来说不归属于其语法结构中,在while循环结束后,该变量还可以继续使用。(不知道循环的次数和范围,只知道循环的结果条件)
- 可以通过空格的方式使两者达到一样的效果
//for循环 int i = 0; for( ; i < 4; i++){ System.out.println(i); } //while循环 int i = 0; while( i < 4){ i++; } System.out.println(i);
1.for循环
//格式
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
public class KV{
public static void main(String[] args){
for(int i = 1;i<=5;i++){
System.out.println("执行"+i+"次断线重连的业务逻辑");
}
}
}
- 累加思想
案例:求1~5的和
public class KV{
public static void main(String[] args){
int sum = 0;
for(int i = 1;i<=5;i++){
sum += i;
}
System.out.println(sum);
}
}
案例:求1~100之间的偶数和
public class KV{
public static void main(String[] args){
int sum = 0;
for(int i = 1;i<=100;i++){
if(i%2==0){
sum += i;
}else{
sum += 0;
}
}
System.out.println(sum);
}
}
- 统计思想
案例:统计满足条件的数字
需求:键盘录入两个数字,表示一个范围。
统计这个范围中,既能被3整除,又能被5整除数字有多少个
public class KV{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Please write the first number");
int num1 = sc.nextInt();
System.out.println("Please write the Second number");
int num2 = sc.nextInt();
int sum = 0;
for(int i = num1;i<=num2;i++){
if(i%3==0&&i%5==0){
sum ++;
}
}
System.out.println("The total is "+sum);
}
}
2.while循环
//格式
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
案例:打印折纸的次数
需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。
请问,我折叠多少次,可以折叠成珠穆朗玛峰的厚度
public class KV{
public static void main(String[] args){
double h = 8844430;
double h1 = 0.1;
int cout = 0;
while(h1<h){
cout++;
h1 *=2;
}
System.out.println(cout);
}
}
案例:回文数
需求:给你一个整数X。如果X是一个回文整数,打印true,否则,返回false。
解释:回文数是指正序倒序读都一样的整数
初级写法:
import java.util.Scanner;
public class KV{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int X = sc.nextInt();
int ge = (X%10);
int shi = (X/10%10);
int bai = (X/100%10);
int qian = (X/1000%10);
int wan = (X/10000%10);
int num = ge*10000+shi*1000+bai*100+qian*10+wan;
System.out.println(num==X);
}
}
写法pro:
import java.util.Scanner;
public class KV{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int X = sc.nextInt();
int temp = X;
int num = 0;
while(X !=0){
int ge = (X%10);
X/=10;
num = (num*10+ge);
}
System.out.println(num==temp);
}
}
案例:求商和余数
需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围)
将两数相除,要求不使用乘法,除法和%运算符。
得到商和余数。
import java.util.Scanner;
public class KV{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("被除数是:");
int beichushu = sc.nextInt();
System.out.println("除数是:");
int chushu = sc.nextInt();
int shang = 0;
while((beichushu-chushu)>=0){
beichushu-=chushu;
shang++;
}
System.out.println("商是:"+shang);
System.out.println("余数是:"+beichushu);
}
}
3.do...while:先执行后判断
//格式
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);