目录

流程控制语句

顺序结构

分支语句

 if语句

switch语句

循环语句

for循环语句

while

do...while

三种循环的区别

跳转控制语句

循环嵌套

 练习


流程控制语句

顺序结构

程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行

分支语句

 if语句

  • 格式1:
if (关系表达式) {
     语句体;    
 }

执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体
3.如果关系表达式的值为false就不执行语句体
4.继续执行后面的语句内容

  • 格式2:
if (关系表达式) {
     语句体1;    
 } else {
     语句体2;    
 }

执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体1
3.如果关系表达式的值为false就执行语句体2
4.继续执行后面的语句内容

  • 格式3:
if (关系表达式1) {
     语句体1;    
 } else if (关系表达式2) {
     语句体2;    
 } 
 …
 else {
     语句体n+1;
 }

执行流程:
1.首先计算关系表达式1的值
2.如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
3.如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
4.…
5.如果没有任何关系表达式为true,就执行语句体n+1。

switch语句

  • 格式:
switch(表达式) {
     case 值1:
     语句体1;
     break;
     case 值2:
     语句体2;
     break;
     …
     default:    
     语句体n+1;
     [break;]
 }

格式说明:

表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值。
break:表示中断,结束的意思,用来结束switch语句。
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。


执行流程:

1.首先计算表达式的值。
2.依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
3.如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉。

循环语句

for循环语句

格式:

for (初始化语句;条件判断语句;条件控制语句) {    
            循环体语句;
 }执行流程:
 1.执行初始化语句
 2.执行条件判断语句,看其结果是true还是false
              如果是false,循环结束
              如果是true,继续执行
 3.执行循环体语句
 4.执行条件控制语句
 5.回到②继续while
基本格式:
 while (条件判断语句) {    
         循环体语句;
 }完整格式:
 初始化语句;
 while (条件判断语句) {
         循环体语句;
         条件控制语句;
 }

执行流程:
1.执行初始化语句
2.执行条件判断语句,看其结果是true还是false
             如果是false,循环结束
             如果是true,继续执行
3.执行循环体语句
4.执行条件控制语句
5.回到②继续

do...while

基本格式:
do {
    循环体语句;
}while(条件判断语句);

完整格式:
初始化语句;
do {
    循环体语句;
    条件控制语句;
}while(条件判断语句);


执行流程:
1.执行初始化语句
2.执行循环体语句
3.执行条件控制语句
4.执行条件判断语句,看其结果是true还是false
            如果是false,循环结束
            如果是true,继续执行
5.回到②继续

三种循环的区别

  • 三种循环的区别

for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

  • for和while的区别

条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

跳转控制语句

  • continue

用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行

  • break

用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

循环嵌套

  • 任何语句对外都可以看成是一句话,一句代码
  • 分支语句中包含分支语句称为分支嵌套
  • 循环语句中包含循环语句称为循环嵌套

 练习

1、某银行推出了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单支取本息。存款年利率表如下:

存期 年利率(%)

一年 2.25

两年 2.7

三年 3.25

五年 3.6

请存入一定金额(1000起存),存一定年限(四选一),计算到期后得到的本息总额。

提示:

存入金额和存入年限均由键盘录入

本息计算方式:本金+本金×年利率×年限

import java.util.Scanner;
public class Demo{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入存储的金额:");
		int money = sc.nextInt();
		System.out.println("请输入存储年限");
		int year = sc.nextInt();
		double outMoney = 0;
		 if (year == 1) {
            outMoney = money + money * 2.25 / 100 * 1;
        } else if (year == 2) {
            outMoney = money + money * 2.7 / 100 * 2;
        } else if (year == 3) {
            outMoney = money + money * 3.25 / 100 * 3;
        } else if (year == 5) {
            outMoney = money + money * 3.6 / 100 * 5;
        } else {
            System.out.println("输入的年限有误");
        }
     
        System.out.println("存款" + year + "年后的本息是:" + outMoney);
	}
}

2、某商场购物可以打折,具体规则如下:

普通顾客购不满100元不打折,满100元打9折;

会员购物不满200元打8折,满200元打7.5折;

不同打折规则不累加计算。

请根据此优惠计划进行购物结算,键盘录入顾客的类别(0表示普通顾客,1表示会员)和购物的折前金额(整数即可),输出应付金额(小数类型)。

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 3.调用方法获取键盘录入的顾客类别和购物金额
        System.out.println("请输入顾客类别(0表示普通顾客,1表示会员顾客):");
        int type = sc.nextInt();
        System.out.println("请输入购物金额:");
        int money = sc.nextInt();
        // 4.先判断顾客类别
        if (type == 0) {
            // 4.1.普通顾客,再判断购物金额
            if (money > 0 && money < 100) {
                System.out.println("您的应付金额为:" + money);
            } else if (money >= 100) {
                System.out.println("您的应付金额为:" + money * 0.9);
            } else {
                System.out.println("您输入的金额有误");
            }
        } else if (type == 1) {
            // 4.2.会员顾客,再判断购物金额
            if (money > 0 && money < 200) {
                System.out.println("您的应付金额为:" + money * 0.8);
            } else if (money >= 200) {
                System.out.println("您的应付金额为:" + money * 0.75);
            } else {
                System.out.println("您输入的金额有误");
            }
        } else {
            System.out.println("您输入的顾客类别有误");
        }
    }
}

3、2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:

0 ~ 3000元的部分,交税3%

3000 ~ 12000元的部分,交税10%

12000 ~ 25000的部分 , 交税20%

25000 ~ 35000的部分,交税25%

35000 ~ 55000的部分,交税30%

55000 ~ 80000的部分,交税35%

超过80000的部分,交税45%

请完成一个个税计算程序,在用户输入税前工资后,计算出他对应的纳税数额,以及税后工资为多少?

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的税前工资:");
        //2.键盘录入税前工资
        int money = sc.nextInt();
        //3.计算应纳税部分的工资
        double before = money - (money*0.1) - 5000;
        //4.定义个税变量
        double shui = 0;
        //5.按照梯度范围计算个税数值
        if(before > 0 && before <=3000){
            shui = before * 0.03;
        }else if(before > 3000 && before <=12000){
            shui = 3000*0.03 + (before-3000) * 0.1;
        }else if(before > 12000 && before <=25000){
            shui = 3000*0.03 + 9000*0.1 +  (before-12000)*0.2;
        }else if(before > 25000 && before <=35000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + (before-25000)*0.25;
        }else if(before > 35000 && before <=55000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + (before-35000)*0.3;
        }else if(before > 55000 && before <=80000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + (before-55000)*0.35;
        }else if(before > 80000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + 25000*0.35 + (before-80000)*0.45;
        }
        //6.计算税后工资
        double after = money - (money*0.1) - shui;
        //7.打印个税和税后工资
        System.out.println("个人所得税" + shui + "元");
        System.out.println("税后工资" + after + "元");
    }
}

4、编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。

import java.util.Scanner;
public class LianXi02{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("num1");
		int num1 = sc.nextInt();
		System.out.println("num2");
		int num2 = sc.nextInt();
		System.out.println("num3");
		int num3 = sc.nextInt();
		if(num1 < num2 && num1 < num3){
			if(num2 < num3){
				System.out.println("num1" + "num2" + "num3");
			}else{
				System.out.println("num1" + "num3" + "num2");
			}
		}else if(num2 < num1 && num2 < num3){
			if(num1 < num3){
				System.out.println("num2" + "num1" + "num3");
			}else{
				System.out.println("num2" + "num3" + "num1");
			}
		}else{
			if(num1 < num2){
				System.out.println("num3" + "num1" + "num2");
			}else{
				System.out.println("num3" + "num2" + "num1");
			}
		}
	}
}

5、大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出 一定的条件:高:180cm以上;富:财富1千万以上;帅:是。(注意:不用管单位) 如果这三个条件同时满足,则:“我一定要嫁给他!!!” 如果三个条件有为真的情况,则:“嫁吧,将就过日子。” 如果三个条件都不满足,则:“不嫁!”

import java.util.Scanner;
public class LianXi02{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("高");
		int Gao = sc.nextInt();
		System.out.println("富/千万");
		double Fu = sc.nextDouble();
		System.out.println("帅");
		Boolean Shuai = sc.nextBoolean();
		if(Gao > 180 && Fu > 1 && Shuai == true){
			System.out.println("我一定要嫁给他!!!");
		}else if(Gao > 180 | Fu > 1 | Shuai == true){
			System.out.println("嫁吧,将就过日子。");
		}else{
			System.out.println("不嫁!");
		}
	}
}

6、模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。

要求:

键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:

请输入第一个整数: 30

请输入第二个整数: 40

请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1

控制台输出:30+40=70

// 1.导包
import java.util.Scanner;
public class Demo2 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 3.提示需要输入的数据,并调用方法获取输入的数据
        System.out.println("请输入第一个整数:");
        int num1 = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int num2 = sc.nextInt();
        System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法)");
        int type = sc.nextInt();
        // 4.使用switch语句判断计算类型,并输出相应的结果
        switch (type) {
            case 1:
                System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
                break;
            case 2:
                System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
                break;
            case 3:
                System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
                break;
            case 4:
                System.out.println(num1 + " / " + num2 + " = " + (num1 * 1.0 / num2));
                break;
            default:
                System.out.println("您输入的运算类别有误");
                break;
        }
    }
}

7、从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。

import java.util.Scanner;
public class LianXi04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入当前月份:");
        int month = sc.nextInt();
        System.out.println("请输入当前是月中的第几天:");
        int day = sc.nextInt();
        int sumDay = 0;
        switch(month){
            case 12:
                sumDay += 30;
            case 11:
                sumDay += 31;
            case 10:
                sumDay += 30;
            case 9:
                sumDay += 31;
            case 8:
                sumDay += 31;
            case 7:
                sumDay += 30;
            case 6:
                sumDay += 31;
            case 5:
                sumDay += 30;
            case 4:
                sumDay += 31;
            case 3:
                sumDay += 28;
            case 2:
                sumDay += 31;
            case 1:
                sumDay += day;
                break;
            default :
                System.out.println("输入有误");
                break;
        }
        System.out.println("当前是2019年的第"+sumDay+"天。");
    }
}

8、对于题7的升级版: 从键盘分别输入年、月、日,判断这一天是当年的第几天

注:判断一年是否是闰年的标准: 1)可以被4整除,但不可被100整除 或 2)可以被400整除

import java.util.Scanner;
public class LianXi04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		System.out.println("请输入当前年份:");
        int year = sc.nextInt();
        System.out.println("请输入当前月份:");
        int month = sc.nextInt();
        System.out.println("请输入当前日期:");
        int day = sc.nextInt();
        int sumDay = 0;
		Boolean LeapYear;
		if(year % 4 == 0 && year % 4 != 0 || year % 400 == 0){
			LeapYear = true;
		}else{
			LeapYear = false;
		}
		if(year < 0 || month < 1 || month > 12 || day > 31){
			System.out.println("你输入的日期有误");
		}else if((LeapYear == true && day > 29) || (LeapYear == false && day > 28)){
			System.out.println("你输入的日期有误");
		}else{
			switch(month){
				case 12:
					sumDay += 30;
				case 11:
					sumDay += 31;
				case 10:
					sumDay += 30;
				case 9:
					sumDay += 31;
				case 8:
					sumDay += 31;
				case 7:
					sumDay += 30;
				case 6:
					sumDay += 31;
				case 5:
					sumDay += 30;
				case 4:
					sumDay += 31;
				case 3:
				if(LeapYear){
					sumDay += 29;
				}else{
					sumDay += 28;
				}
				case 2:
					sumDay += 31;
				case 1: 
					sumDay+=day;
					break;
			}
			if(LeapYear){
				System.out.println(year + "年" + month + "月" + day + "这一天是当年的第" + sumDay + "天," + "该年为闰年。");
			}else{
				System.out.println(year + "年" + month + "月" + day + "这一天是当年的第" + sumDay + "天," + "该年不是闰年。");
			}
		}
	}
}

9、编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期, 每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。 提示:2019年:猪 2019 % 12 == 3

import java.util.Scanner;
public class LianXi04{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
		System.out.println("请输入年份:");
        int year = sc.nextInt();
		switch(year % 12){
			case 0:
			System.out.println("对应生肖是monkey");
			break;
			case 1:
			System.out.println("对应生肖是rooster");
			break;
			case 2:
			System.out.println("对应生肖是dog");
			break;
			case 3:
			System.out.println("对应生肖是pig");
			break;
			case 4:
			System.out.println("对应生肖是rat");
			break;
			case 5:
			System.out.println("对应生肖是ox");
			break;
			case 6:
			System.out.println("对应生肖是tiger");
			break;
			case 7:
			System.out.println("对应生肖是rabbit");
			break;
			case 8:
			System.out.println("对应生肖是dragon");
			break;
			case 9:
			System.out.println("对应生肖是snake");
			break;
			case 10:
			System.out.println("对应生肖是horse");
			break;
			case 11:
			System.out.println("对应生肖是sheep");
		}
	}
}

10、打印1~100之间所有是7的倍数的整数的个数及总和

public class LianXi05{
public static void main(String[] args){
	int sum = 0;
	int count = 0;
	for(int i = 1;i <=100;i++){
		if(i % 7 == 0){
			sum += i;
			count++;
		}
	}System.out.println("个数" + count);
	System.out.println("总和" + sum);
   }
}

11、用do_while循环语句实现,打印出3的倍数,如果这个数是7的倍数则结束程序。

public class LianXi06{
public static void main(String[] args){
	int i = 3;
	do{
		if(i % 3 == 0){
			System.out.println(i);
		}
		i+=3;
	}while(i % 7 != 0);
   }
}

12、输入高度,输出直角三角形。

import java.util.Scanner;
public class LianXi07{
public static void main(String[] args){
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入高度:");
	int h = sc.nextInt();
	for (int i = 1;i <= h;i++){
		for (int j = 1;j <= i; j++){
			System.out.print("#");
		}
			System.out.println();
		}
   }
}

13、输入高度,输出倒直角三角形。

import java.util.Scanner;
public class LianXi07{
public static void main(String[] args){
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入高度:");
	int h = sc.nextInt();
	for (int i = 1;i <= h;i++){
		for (int j = h - i;j >= 0; j--){
			System.out.print("*");
		}
			System.out.println();
		}
   }
}

14、打印1-100之间非13的倍数,使用continue语句

public class LianXi07{
	public static void main(String[] args) {
		for(int i = 1;i <= 100;i++){
			if(i % 13 == 0){
				continue;
			}else{
				System.out.println(i);
			}
		}
	}
}

15、求出1~100之间,既是3又是7的倍数的自然数出现的次数?

public class LianXi07{
	public static void main(String[] args){
		int count = 0;
		for(int i = 1;i <= 100;i++){
			if(i % 3 == 0 && i % 7 == 0){
				count++;
			}
		}System.out.println(count);
	}
}

16、

java 优惠券共享使用逻辑计算_键盘录入

import java.util.Scanner;
public class LingXing {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入高度:");
        int h = sc.nextInt();
        for (int i = 1;i <= h;i++){
            for (int j = h-i; j > 0;j--){
                System.out.print(" ");
            }
            for (int k = 1;k <= i;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
        for (int i = 1;i <= h;i++){
            for (int k = 1;k <= i;k++){
                System.out.print(" ");
            }
            for (int j = h-i-1; j >= 0;j--){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

 

java 优惠券共享使用逻辑计算_控制语句_02