007-JavaSE基础巩固练习:高级循环综合练习

高级循环综合练习

一、小老虎吃包子1

  • 需求

    • 小老虎吃包子,第三个包子有虫子,跳过。
  • 实现

    package com.app.demo9_advanced_loop_practice;
    
    /**
        高级循环综合练习
            小老虎吃包子:
                吃到第三个包子的时候,发现有虫子,跳过
     */
    public class AdvancedLoopDemo1 {
        public static void main(String[] args) {
            // 1、定义包子数量
            int bum = 5;
            for (int i = 1; i <= bum; i++) {
                // 判断是否为第3个包子
                if (i == 3) {
                    // true: 说明第3个包子有虫子
                    System.out.println("第" + i + "个包子有虫子~ 小老虎不吃~");
                    continue;   // 跳过不吃:结束本次循环,继续下次循环
                }
                System.out.println("小老虎正在开心的吃着第" + i + "个包子~~");
            }
        }
    }
    


二、小老虎吃包子2

  • 需求

    • 小老虎吃包子,吃完第三个包子的时候饱了。
  • 实现

    package com.app.demo9_advanced_loop_practice;
    
    /**
        高级循环的综合练习
            小老虎吃包子:
                吃完第三个包子就饱了
     */
    public class AdvancedLoopDemo2 {
        public static void main(String[] args) {
            // 1、定义变量,存储包子的数量
            int bum = 10;
            for (int i = 1; i <= bum; i++) {
                System.out.println("小老虎开开心心的吃着第" + i + "个包子~~~");
                // 判断小老虎是否吃完了第3个包子
                if (i == 3) {
                    System.out.println("小老虎吃饱了~~");
                    break;  // 跳出整个循环
                }
            }
        }
    }
    
    • 控制台输出结果:
    小老虎开开心心的吃着第1个包子~~~
    小老虎开开心心的吃着第2个包子~~~
    小老虎开开心心的吃着第3个包子~~~
    小老虎吃饱了~~
    
    Process finished with exit code 0
    
    


三、逢7过

  • 需求

    • 朋友聚会的时候可能会玩一个游戏:逢7过
    • 游戏规则:
      • 从任意一个数字开始报数,当你要报的数字是包含7或者是7的倍数时都要说:过
    • 使用程序在控制台打印出 1~100 之间的满足逢七过规则的数据
  • 实现

    package com.app.demo9_advanced_loop_practice;
    
    /**
        高级循环的综合练习
            逢七过:
                1~100之间,满足逢七过规则的数字都为 “过”
                逢七过规则:数字的个位或者十位包含7,或者数字是7的倍数,都为 “过”
                例如:1 2 3 4 5 6 过 8 9 10 11 12 13 过 15...
     */
    public class AdvancedLoopDemo3 {
        public static void main(String[] args) {
            // 1、for循环:得到1~100之间的每一个数字
            for (int i = 1; i <= 100; i++) {
                // 2、判断每一个数字,如果符合逢七过规则,就打印:过;否则就打印数字本身
                /**
                    找数的个位——>i % 10 == 7: 假如i=67, 67 / 10 = 6.7,
                            取余数: 7, 因此余数7 == 7,该数符合逢七过规则的包含7,就打印 "过"
                    找数的十位——>i / 10 % 10 == 7: 假如i=79, 79 / 10 = 7, 7 % 10 = 0.7,
                            取余数: 7, 因此余数7 == 7,该数符合逢七过规则的包含7,就打印 "过"
                    找整除7的数——>i % 7 == 0: 假如i=21, 21 / 7 = 3,
                            取余数: 0, 因此余数0 == 0,该数符合逢七过规则的7的倍数,就打印 "过"
                 */
                if (i % 10 == 7 || i / 10 % 10 == 7 || i % 7 == 0) {
                    System.out.print("过 ");
                    // 该数符合逢七过规则,因此跳出当前循环的本次循环,进入下一次循环
                    continue;
                }
    
                // 3、程序走到这里,说明该数字不符合逢七过规则,因此打印数字本身
                System.out.print(i + " ");
            }
        }
    }
    
    1 2 3 4 5 6 过 8 9 10 11 12 13 过 15 16 过 18 19 20 过 22 23 24 25 26 过 过 29 30 31 32 33 34 过 36 过 38 39 40 41 过 43 44 45 46 过 48 过 50 51 52 53 54 55 过 过 58 59 60 61 62 过 64 65 66 过 68 69 过 过 过 过 过 过 过 过 过 过 80 81 82 83 过 85 86 过 88 89 90 过 92 93 94 95 96 过 过 99 100 
    Process finished with exit code 0
    
    


四、求平方根

  • 需求

    • 键盘录入一个大于等于2的整数 x,计算并返回 x 的平方根。
    • 结果只保留整数部分,小数部分将被舍去。
  • 分析

    • 平方根:

      比如:4的平方根就是2,16的平方根就是4 ...
      
      那么,10的平方根是多少呢?
      1 * 1 = 1 < 10, 因此1不是10的平方根
      2 * 2 = 4 < 10, 因此2不是10的平方根
      3 * 3 = 9 < 10, 因此3不是10的平方根
      4 * 4 = 16 > 10
      推断:10的平方根是在3~4之间,那么结果只保留整数部分的话,10的平方根就是3
      
  • 实现

    package com.app.demo9_advanced_loop_practice;
    
    import java.util.Scanner;
    
    /**
        高级循环的练习
            求平方根:
                键盘录入一个大于等于2的整数x,计算并返回 x 的平方根
                结果只保留整数部分,小数部分舍去
     */
    public class AdvancedLoopDemo4 {
        // 1、创建一个静态的键盘录入对象,用于录入数据
        public static Scanner sc = new Scanner(System.in);
    
        public static void main(String[] args) {
            // 1、调用计算x的平方根的方法,并直接输出x的平方根
            System.out.println(squareRoot(sc));
        }
    
    
        /**
         * 3、定义求x的平方根的实现方法
         * @return      返回x的平方根
         */
        private static String squareRoot(Scanner sc) {
            while (true) {
                // a、键盘录入一个整数x
                System.out.println("请您输入一个大于等于2的整数:");
                int x = sc.nextInt();
    
                // b、x必须大于等于2
                if (x < 2) {
                    System.out.println("您输入的整数不能小于2~ 请重新输入!");
                }else {
                    // c、得到 1~x 的每一个数字
                    for (int i = 1; i <= x; i++) {
                        // 计算x的平方根
                        if (i * i == x) {
                            // 如果i * i = x,说明i就是x的平方根,直接返回
                            return i + "是" + x + "的平方根";
                        } else if (i * i > x) {
                            // 如果i * i > x,说明x的平方根在 i-1 到 i之间,直接返回整数部分
                            return (i-1) + "是" + x + "平方根的整数部分";
                        }
                        // 如果程序走到这里,说明程序未进入if和else if的判断:说明i * i < x,说明i不是x的平方根,则继续计算
                    }
                }
            }
        }
    }
    
    请您输入一个大于等于2的整数:
    0
    您输入的整数不能小于2~ 请重新输入!
    请您输入一个大于等于2的整数:
    1
    您输入的整数不能小于2~ 请重新输入!
    请您输入一个大于等于2的整数:
    -123
    您输入的整数不能小于2~ 请重新输入!
    请您输入一个大于等于2的整数:
    19
    4是19平方根的整数部分
    
    Process finished with exit code 0
    
    


五、求质数

  • 需求

    • 键盘录入一个正整数 x,判断该整数是否为一个质数。
  • 分析

    • 质数:

      如果一个整数只能被1和自己本身整除的,那这个数就是质数,否则这个数叫做合数
      比如:
      7 = 1 * 7, 只能被1和7本身整除的,7就是质数
      8 = 1 * 8 2 * 4, 可以被1和8本身整除,但是还可以被2和4整除,8就是合数
      
  • 实现

    package com.app.demo9_advanced_loop_practice;
    
    import java.util.Scanner;
    
    /**
     * 高级循环的练习
     * 求质数:
     *    键盘录入一个正整数x,判断该数是否为一个质数
     */
    public class AdvancedLoopDemo5 {
        public static void main(String[] args) {
            // 1、调用求质数的方法,并直接输出返回结果
            System.out.println(isPrimeNumber());
        }
    
        /**
         * 2、定义求质数的实现方法
         * @return  返回该数是质数还是合数
         */
        private static String isPrimeNumber() {
            while (true) {
                // a、键盘录入一个正整数x
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入一个正整数:");
                int x = sc.nextInt();
    
                // b、定义一个标记变量,表示一开始就认为这个数是质数
                boolean flag = true;
    
                // c、判断该数是否为正整数
                if (x > 0) {
                    // d、输入的是正整数,再判断输入的数是否为1
                    if (x == 1) {
                        System.out.println("1既不是质数,也不是合数~");
                    }else {
                        // e、得到 2~x 之内的每一个数字
                        for (int i = 2; i < x; i++) {
                            /**
                             比如 x = 7
                             i=2, 2<7, 进入第一次循环:
                             if: x%i ==> 7%2 ==>  / 2 = 1, 余1
                             */
                            // f、除去1和x自己本身,如果x还能被i(2 到 x-1 的所有数)整除的话,说明不是一个质数
                            if (x % i == 0) {
                                // g、修改标记变量的值为false,表示该数不是质数,是合数
                                flag = false;
                                break;
                            }
                        }
    
                        /**
                         h、循环结束,说明x除了1和x自己本身,已经没有其他数可以整除x了。
                         此时flag的值还没有被修改成false,说明是一个质数。
                         */
                        if (flag) {
                            return x + "是一个质数~";
                        }else {
                            // i、假如flag的值被修改成false了,说明x不是一个质数,是合数
                            return x + "是一个合数~";
                        }
                    }
                }else {
                    // 不是
                    System.out.println("sorry!只能输入正整数~");
                }
            }
        }
    }
    
    请您输入一个正整数:
    0
    sorry!只能输入正整数~
    请您输入一个正整数:
    -213
    sorry!只能输入正整数~
    请您输入一个正整数:
    1
    1既不是质数,也不是合数~
    请您输入一个正整数:
    9
    9是一个合数~
    
    Process finished with exit code 0
    
    
    请您输入一个正整数:
    7
    7是一个质数~
    
    Process finished with exit code 0
    
    

求质数代码优化思路
  • 了解。
假如要,求100000是不是一个质数:
那么从 2 到 10万,循环次数将近10万次。

推荐一个简化的思路
81:
1 * 81, 3 * 27, 9 * 9

以81的平方根9,为中心
假设 a * b = 81
那么 a和b 中,其中有一个必定是小于等于9的,另一个必定是大于等于9的。

假设,都是大于9 ---> 9.1 * 9.1 > 81
假设,都是小于9 ---> 8.9 * 8.9 < 81
推断:其中一个数字一定是小于等于平方根,另外一个数字一定是大于等于平方根
int number = 100000;
// 如果这个范围之内,所有的数字都不能被number整除,那么number就是一个质数
for(int i = 2; i <= number的平方根; i++) {
    
}


六、猜数字小游戏

  • 需求

    • 程序自动生成一个 1~100 之间的随机数字,使用程序实现猜出这个数字是多少?
  • 思路

    package com.app.demo9_advanced_loop_practice;
    
    import java.util.Random;
    
    /**
        高级循环的练习
            生成随机数
     */
    public class AdvancedLoopDemo6 {
        public static void main(String[] args) {
            // 创建随机数对象
            Random rd = new Random();
    
            // 需求:随机数范围 1~100
            /**
                秘诀:
                    用来生成任意数到任意数之间的随机数:7~15
                    1、让这个范围都减去一个值,让这个范围从0开始:-7  0~8
                    2、尾巴+1      8+1=9
                    3、最终的结果,再加上第一步减去的值
             */
            for (int i = 0; i < 20; i++) {
                int number = rd.nextInt(9) + 7;
                //              0 ~ 8 + 7
                //              7 ~ 15
                System.out.print(number + " ");
            }
    
            System.out.println();
    
            // 循环生成随机数并输出
            for (int i = 0; i < 150; i++) {
                // 生成随机数
                int number2 = rd.nextInt(100) + 1;
                //                      0 ~ 99 + 1
                //                      1 ~ 100
                
                // 输出随机数用空格隔开
                System.out.print(number2 + " ");
            }
        }
    }
    
    11 11 7 8 7 13 9 14 12 13 12 8 14 8 9 14 15 10 14 11 
    27 13 57 27 84 42 69 85 31 57 15 94 11 3 20 58 11 26 55 95 77 26 63 33 42 57 80 84 66 64 27 11 17 72 66 15 89 94 81 69 28 39 54 57 95 44 26 24 13 10 88 5 61 53 10 96 47 19 8 87 61 20 81 47 71 37 40 83 86 54 11 84 82 78 55 69 19 91 89 30 36 98 69 21 43 40 85 100 21 2 65 22 95 35 9 76 8 53 81 36 54 4 72 50 63 47 96 52 60 79 79 60 68 70 67 60 15 37 48 81 98 43 71 65 72 34 59 28 96 23 40 58 38 22 3 16 64 20 36 60 69 78 49 94 81 71 65 41 80 10 
    Process finished with exit code 0
    
    
  • 实现

    package com.app.demo9_advanced_loop_practice;
    
    import java.util.Random;
    import java.util.Scanner;
    
    /**
        高级循环的练习
            猜数字小游戏:
                生成一个1~100之间的随机数字
                猜这个数字是多少?
     */
    public class AdvancedLoopTest7 {
        public static void main(String[] args) {
            // 1、创建随机数对象
            Random rd = new Random();
    
            // 2、生成一个1~100之间的随机数
            int number = rd.nextInt(100) + 1;
    
    //        System.out.println("答案是:" + number);
    
            // 3、猜这个数字是多少
            // 创建键盘录入对象,用于输入要猜的数字
            Scanner sc = new Scanner(System.in);
    
            while (true) {
                // 开始猜数字
                System.out.println("请猜猜这个数是:");
                int inputNumber = sc.nextInt();
    
                // if判断:如果猜的数 比 答案数 大了,提示 "猜大了!"
                if (inputNumber > number) {
                    System.out.println("猜大了!");
                }else if (inputNumber < number){    // 如果猜的数 比 答案数 小了
                    System.out.println("猜小了!");
                }else { // 如果以上两种情况都不符合,则说明猜中了
                    System.out.println("恭喜您!猜中了~");
                    break;	// 猜中了,跳出循环
                }
            }
        }
    }
    
    请猜猜这个数是:
    60
    猜小了!
    请猜猜这个数是:
    89
    猜大了!
    请猜猜这个数是:
    80
    猜大了!
    请猜猜这个数是:
    70
    猜大了!
    请猜猜这个数是:
    65
    猜大了!
    请猜猜这个数是:
    64
    恭喜您!猜中了~
    
    Process finished with exit code 0
    
    
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值