Java学习笔记(七)—— 流程控制和循环

if单分支

if单分支格式

if (表达式) {
    语句块;
}
graph TD
    A[布尔表达式] --> B(ture)
    B --> C(语句块)
    A --> D(false)
    D --> E
    C --> E(下行代码)

if双分支

if双分支格式

if(表达式){
    语句块1;
}else{
    语句块2;
}

if多分支

if(表达式1){
    语句块1;
}else if(表达式2){
    语句块2;
}
······
else{
    语句块n;
}
graph TD
    A[表达式1] --> B[true]
    B --> C(语句块1)
    A --> D(false)
    D --> E(表达式2)
    E --> F(false)
    F --> G(表达式n)
    G --> H(false)
    H --> I(语句块n+1)
    C --> Z(************************下行语句************************)
    E --> J(true)
    J --> K(语句块2)
    K --> Z
    G --> L(语句块n)
    L --> Z
    I --> Z

随机数:Math.random() == [0.0,1.0)

测试1

程序的优化:主要考虑程序的不足之处

重点语句:

if(sc.hasNextInt()==true) //判断输入的值是否为int类型,如果为int类型就接收

程序主体:

/*
会员在购物时,不同积分享受的折扣不同,规则如下:
    会员积分x        折扣
     x>=80000        6
   4000<=x<8000      7
   2000<=x<4000      8
     x<2000          9
*/

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入会员积分(注意:是一个整数):");
		//先判断键盘录入的数据是不是int类型的
		if(sc.hasNextInt()==true){
			int integral = sc.nextInt();    // 键入积分
			//判断这个积分是否是正数:
			if(integral>=0){
				String discount;
				if (integral>=8000){
					discount = "6折";
				}else if(integral>=4000){
					discount = "7折";
				}else if (integral>=2000){
					discount = "8折";
				}else{
					discount = "9折";
				}
				System.out.println("您享受的折扣是"+discount);
			}else{
				System.out.println("您输入的积分是负数,请重新输入!");
			}
		}else{
			System.out.println("您输入的积分不是整数,请重新输入!");
		}
	}
}
测试2

流程控制的逻辑:思路要清晰

重点语句:

if (sex1.equals(sex)) // 比较两者的值是否相同,常用于字符间

程序主体:

/*
小朋友搬桌子:
年龄大于7岁,可以搬桌子
如果年龄大于5岁,性别是男,可以搬桌子;
否则不可以搬动桌子,提示:你还太小了
 */

import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入你的年龄:");
        int age = sc.nextInt();
        if (age>7){
            System.out.println("可以搬桌子");
        }else if (age>5){
            System.out.print("请输入你的性别:(输入'男'或'女'):");
            String sex = sc.next();
            String sex1 = "男";
            if (sex1.equals(sex)){
                System.out.println("可以搬桌子");
            }else {
                System.out.println("你还太嫩啦");
            }
        }else{
            System.out.println("你还太嫩啦");
        }
    }
}

switch语句

switch语句格式

switch(表达式){
    case 1:语句1;break;
    case 2:语句2;break;
    ······
    default:语句n;
}

switch主要应用于等值判断

  • 相邻分支的输出一样可以保留最后一个分支,上面的都可以省略不写
  • 为防止语句穿透,每条输出语句的后面要加break关键字来控制

程序主体:

/*
根据给出的学生分数,判断学生的的等级:
        >=90        A
        >=80        B
        >=70        C
        >=60        D
        <60         E
*/

import java.util.Scanner;

public class Switch_test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入学生的分数(1-100之间的整数):");
        int grade = sc.nextInt();
        switch (grade/10){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:System.out.println("E级");break;
            case 6:System.out.println("D级");break;
            case 7:System.out.println("C级");break;
            case 8:System.out.println("B级");break;
            case 9:
            case 10:System.out.println("A级");break;
            default:System.out.println("您输入的分数有误!");
        }
    }
}
  • 注意:default可以放在switch下的任意行,但是不在最后一行就要后接break

while语句

while语句格式

while(表达式){
    语句块;
}
测试1
// 练习:1+2+3+4+5+······+100

public class While_test1 {
    public static void main(String[] args) {
        int i = 1,sum=0;
        while(i<=100){
            sum += i;
            i++;
        }
        System.out.println("1+2+3+4+5+······+100的和为:"+sum);
    }
}
测试2
// 练习:2+4+6+8+……+998+1000

public class While_test2 {
    public static void main(String[] args) {
        int i=2,sum=0;
        while(i<=1000){
            sum+=i;
            i += 2;
        }
        System.out.println("2+4+6+8+……+998+1000的和为:"+sum);
    }
}
测试3
// 练习:5+10+15+20+……+100

public class While_test3 {
    public static void main(String[] args) {
        int i=5,sum=0;
        while(i<=100){
            sum+=i;
            i += 5;
        }
        System.out.println("5+10+15+20+……+100的和为:"+sum);
    }
}
测试4
// 练习:99+97+95+……+5+3+1

public class While_test4 {
    public static void main(String[] args) {
        int i = 1,sum = 0;
        while(i<=99){
            sum += i;
            i +=2 ;
        }
        System.out.println("99+97+95+……+5+3+1的和为:"+sum);
    }
}
测试5
// 练习:1*3*5*7*9*11*13

public class While_test5 {
    public static void main(String[] args) {
        int i = 1,sum = 1;
        while(i<=13){
            sum *= i;
            i += 2;
        }
        System.out.println("1*3*5*7*9*11*13的和为:"+sum);
    }
}

do while语句

do while语句格式

do{
    语句块;
}while(表达式);
  • 先执行循环体,然后再判断。也就是至少会执行一次循环

while和do-while的区别:

  • while:先判断,再执行
  • do-while:先执行,再判断 —> 至少被执行一次,从第二次开始才进行判断

什么场合使用do-while:

while(考试是否通过){
    考试;
}
----> 不合适
do{
    考试;
}while(考试是否通过);
----> 合适

for语句

for语句格式

for(初始表达式;布尔表达式;迭代因子){
    语句块;
}

for循环在第一次运行的时候要进行初始化,然后进行判断,若结果为true,则执行循环内容然后进行i++部分(或者别的表达式)的操作

for循环里的if嵌套

测试1
// 输出一个1-100中被5整除的数,每行输出6个

public class For_test1 {
    public static void main(String[] args) {
        int n=0;
        for (int i = 1;i<=100;i++){
            if (i%5==0){ // 对被5整除的数进行输出
                System.out.print(i+"\t");
                n++;
                if (n%6==0){ //每输出6个换行
                    System.out.println("");
                }
            }
        }
    }
}

测试2
/*
【1】请录入10个整数,当输入的数是666的时候,退出程序
【2】判断其中录入正数的个数并输出
【3】判断系统的退出状态:是正常退出还是被迫退出
 */

import java.util.Scanner;

public class For_test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=0;
        boolean m = true;
        for (int i = 1;i<=10;i++){
            System.out.print("请输入10整数,现在是第" + i + "个:");
            int num = sc.nextInt();
            if (num == 666){
                System.out.println("输入666,系统强制退出");
                break;
            }else if(num>=0){
                n++;
            }
            if (i == 10){
                m = false;
            }
        }
        if (m==false){
            System.out.println("录入的正数个数为"+ n +"\n系统正常退出");
        }
    }
}

关键字:break,continue,return

break     立刻停止循环

continue     结束本次循环,开始下一次循环

return     遇到return结束正在执行的方法


双重循环

测试1

乘法口诀

/*
乘法口诀:
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*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	
 */

public class For_test3 {
    public static void main(String[] args) {
        for (int i = 1;i<=9;i++){
            for (int j = 1;j<=i;j++){
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}
测试2

长方形

// 长方形

public class For_test4 {
    public static void main(String[] args) {
        for (int i = 1;i <= 4;i++){
            for (int j = 1;j <= 9;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
测试3

距离前面有一定空隙的长方形

// 距离前面有一定空隙的长方形

public class For_test5 {
    public static void main(String[] args) {
        for (int i = 1;i <= 4;i++){
            for (int k = 1;k <= 4;k++){
                System.out.print(" ");
            }
            for (int j = 1;j <= 9;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
测试4

平行四边形

// 平行四边形

public class For_two_test4 {
    public static void main(String[] args) {
        for (int i =1; i <= 4;i++){
            for (int j = 9; j >= i;j--){
                System.out.print(" ");
            }
            for (int k = 1; k <= 9;k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
测试5

三角形

// 三角形

public class For_two_test5 {
    public static void main(String[] args) {
        for (int i = 1;i <= 4;i++){
            for (int j = 7;j >= i;j--){
                System.out.print(" ");
            }
            for (int k = 1;k <= i*2-1;k++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
测试6

菱形

// 菱形

public class For_two_test6 {
    public static void main(String[] args) {
        for (int i = 1;i <= 3;i++){
            for (int j = 1;j <= 5-i;j++){
                System.out.print(" ");
            }
            for (int k = 1;k <= i*2-1;k++){
                System.out.print("*");
            }
            System.out.println();
        }
        for (int q = 1;q <= 4;q++){
            for (int w = 1;w <= q;w++){
                System.out.print(" ");
            }
            for (int e = 1;e <= 7-2*q+2;e++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
测试7

空心菱形

// 空心菱形

public class For_two_test7 {
    public static void main(String[] args) {
        for (int i = 1;i <= 4;i++){
            for (int j = 1;j <= 5-i;j++){
                System.out.print(" ");
            }
            for (int j = 1;j <= 2*i-1;j++){
                if (j==1||j==(2*i-1)){
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        for (int a = 1;a <= 3;a++){
            for (int b = 1;b <= a+1;b++){
                System.out.print(" ");
            }
            for (int c = 1;c <= 7-2*a;c++){
                if (c==1||c==7-2*a){
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}
测试8

实心菱形(先打印出一个正方形,然后某些位置上打印星号,某些位置上打印空格)

// 实心菱形(先打印出一个正方形,然后某些位置上打印星号,某些位置上打印空格)

public class For_two_extend_1 {
    public static void main(String[] args) {
        int size = 17;
        boolean flag = true; // 定义一个开关,进行菱形上半侧和下半侧的不同的变量控制
        int startNum = size/2+1;
        int endNum = size/2+1;
        for (int i = 1; i <= size; i++) {
            for (int j = 1; j <= size; j++) { // 打印一个正方形
                if (startNum <= j && j <= endNum) {
                    System.out.print("*"); // 有些地方打印星号
                } else {
                    System.out.print(" "); // 有些地方打印空格
                }
            }
            System.out.println();
            if (endNum == size){  // 当打印到星号最多的那一行时,下一行则为下半侧
                flag = false;
            }
            if (flag){  // 在菱形的上半侧
                startNum--;
                endNum++;
            }else{      // 在菱形的下半侧
                startNum++;
                endNum--;
            }
        }
    }
}

三重循环

测试1

百钱买百鸡

/*
百钱买百鸡:
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,
用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
数学:
设未知数:
公鸡:x只
母鸡:y只
小鸡:z只
x+y+z=100只
5x+3y+z/3=100钱
 */

public class For_three_test1 {
    public static void main(String[] args) {
        int n = 1;
        for (int i=1;i <= 100;i++){
            for (int j=1;j <= 100;j++){
                for (int k = 1;k <= 100;k++){
                    int sum = i+j+k,sum2 = 5*i+3*j+k/3;
                    if (sum==100&&sum2==100&&k%3==0){
                        System.out.println("第"+ n +"种:" +
                                "有" + i + "只公鸡," +
                                "有" + j + "只母鸡," +
                                "有" + k + "只小鸡");
                        n++;
                    }
                }
            }
        }
    }
}

优化百钱买百鸡

public class For_three_test1 {
    public static void main(String[] args) {
        int n = 1;
        for (int i=1;i <= 19;i++){
            for (int j=1;j <= 31;j++){
                int k = 100 - i - j;
                int sum = i+j+k,sum2 = 5*i+3*j+k/3;
                if (sum==100&&sum2==100&&k%3==0){
                    System.out.println("第"+ n +"种:" +
                            "有" + i + "只公鸡," +
                            "有" + j + "只母鸡," +
                            "有" + k + "只小鸡");
                    n++;
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值