• 流程控制知识大闯关


    前言

    既然已经学习了 Java 中的流程控制,接下来就来实际操作下,利用我们所学知识来解决实际的问题。

    光学是没有用的,只有不断实践才能了解其中的真正含义。

    闯关

    第一关:打印折纸的次数

    1. 题目

    已知世界上最高的山峰是珠穆朗玛峰,它的高度是 8844.43 米,假设有一张足够大的纸,其厚度为 0.1 毫米,那么请问我要折叠多少次,才能将这张纸折成珠穆朗玛峰的高度?

    1. 解析
    折叠次数厚度
    10.1
    20.2
    30.4
    40.8
    …………

    可以发现,纸张初始厚度为 0.1 毫米,而每次折叠之后,折叠后的纸张厚度都是未折叠前的 2 倍。而同时,我们事先是不清楚具体要叠多少次的,所以我们选择 while 来进行循环。

    1. 实现
    public class MountQomolangma {
        public static final double HEIGHT = 8844430;
    
        public static void main(String[] args) {
            // 初始厚度
            double init = 0.1;
    
            // 统计次数
            int count = 0;
    
            while (init < HEIGHT) {
                init *= 2;
                count++;
            }
    
            System.out.println("一共需要折叠 " + count + " 次");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    第二关:回文数

    1. 题目

    假设给你一个整数 x,如果这个数是回文数,打印 true,否则打印 false

    回文数:指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    1. 解析

    既然回文数的定义是正序和倒序读都是一样,那么我们就把这个数逆转,然后比较逆转的数和原来的数是否相等,如果相等,那么说明这个数是一个回文数,否则它就不是一个回文数。

    1. 实现
    import java.util.Scanner;
    
    public class Palindromes {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
    
            System.out.println("输入一个整数");
    
            // 输入的初始值
            int num = in.nextInt();
            // 临时记录
            int tmp = num;
            // 反转后的数
            int reverse = 0;
    
            while (num != 0) {
                int x = num % 10;
                num /= 10;
                reverse = reverse * 10 + x;
            }
    
            System.out.println(tmp + " 是一个回文数 :" + (reverse == tmp));
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    第三关:求商和余数

    1. 题目

    给定两个整数,分别是被除数和除数,然后在不使用乘法、除法和 % 运算符的情况下,求出商和余数。

    1. 解析

    平时如果要求两数的商,那么可以使用 /,而要求两数的余数则可以使用 %。但现在已经规定不能使用这两个运算符,那么就只想另想办法。

    我们知道,其实乘除法归根结底还是加减法的简化,所以我们可以利用减法来实现求两数的商和余数。

    1. 实现
    import java.util.Scanner;
    
    public class Division {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
    
            System.out.println("输入被除数:");
            int num1 = in.nextInt();
    
            System.out.println("输入除数:");
            int num2 = in.nextInt();
    
            // 商
            int quotient = 0;
            // 余数
            int remainder = 0;
    
            while (num1 >= num2) {
                num1 -= num2;
                quotient++;
                remainder = num1;
            }
    
            System.out.format("两数的商是: %d, 两数的余数是: %d\n", quotient, remainder);
    
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    第四关:逢七必过

    1. 题目

    游戏规则:从任意一个数字开始报数,当要报的数字是包含 77 的倍数时,都要说:过。

    打印出 1 - 100 之间的满足逢七必过规则的数据。

    1. 解析

    当一个数是 7 的倍数,那么这个数除以 7 的余数为 0。而如果这个数包含 7,那么这个数的个位或者十位是 7

    1. 实现
    public class SevenPass {
        public static void main(String[] args) {
            for (int i = 1; i <= 100; i++) {
                int ge = i % 10;
                int shi = i / 10;
    
                if (i % 7 == 0 || ge == 7 || shi == 7) {
                    System.out.println("过");
                } else {
                    System.out.println(i);
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    第五关:平方根

    1. 题目

    输入一个大于等于 2  的整数,计算并返回这个数的平方根,结果只保留整数部分。

    1. 解析

    求一个数的平方根,通过遍历的方式,如果在不大于所给数的范围之内存在一个数的平方等于所给数,那么范围内的这个数就是所给数的平方根。而如果范围内存在一个数的平方刚好大于所给数,那么比这个数小 1  的数一定是所给数的平方根的整数部分,也就是我们所求的结果。

    1. 实现
    import java.util.Scanner;
    
    public class Square {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("输入一个整数");
            int num = scanner.nextInt();
    
            for (int i = 1; i <= num; i++) {
                if (num == i * i) {
                    System.out.println(num + " 的平方根是: " + i);
                    break;
                } else if (num < i * i) {
                    System.out.println(num + " 的平方根是: " + (i - 1));
                    break;
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    第六关:判断一个数是否为质数

    1. 题目

    从键盘输入一个正整数,判断该数是否为质数。

    1. 解析

    所谓质数,就是指这个数只能被 1 和它本身整除,要注意 1 既不是质数也不是合数。

    此时通过遍历,如果 1  到它之间存在一个数能被所给数整除,那么说明说给数不是一个质数。

    1. 实现
    import java.util.Scanner;
    
    public class Prime {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("输入一个整数");
    
            int num = scanner.nextInt();
    
            boolean flag = true;
    
            for (int i = 2; i < num; i++) {
                if (0 == num % i) {
                    flag = false;
                    break;
                }
            }
    
            System.out.println(num + " 是一个质数:" + flag);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    第七关:猜数小游戏

    1. 题目

    系统随机给出一个 1 - 100  之间的整数,然后用程序实现才出这个数字是多少。

    1. 解析

    随机数需要用 Random  包,然后就是通过比较输入的数和生成的随机数大小,直到最后猜中。

    1. 实现
    import java.util.Random;
    import java.util.Scanner;
    
    public class GuessNum {
        public static void main(String[] args) {
            Random rand = new Random();
            int num = rand.nextInt(100) + 1;
    
            Scanner scanner = new Scanner(System.in);
    
            while (true) {
                System.out.println("输入你猜的数");
                int tmp = scanner.nextInt();
                if (num == tmp) {
                    System.out.println("你猜对了");
                    break;
                } else if (num < tmp) {
                    System.out.println("你猜大了,再猜");
                } else {
                    System.out.println("你猜小了,再猜");
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    总结

    以上就是关于流程控制中关于 forwhile 的知识测验了,你闯过了几关呢?

  • 相关阅读:
    高级架构之用户态网络协议栈TCP/IP设计
    2023.9.23(对这一年过去几个月的总结)
    使用 FVTool 进行滤波器分析
    第十六章《正则表达式》第3节:Pattern类
    MyBatisPlus的使用【详细】
    12月3日下午:thinkphp框架中的视图以及模型剩余部分
    MatlabR2019b安装教程
    制作翻页电子书最简单的教程来也!
    用DIV+CSS技术制作个人博客网站(web前端网页制作课期末作业)
    QT 6.5下载安装及配置教程
  • 原文地址:https://blog.csdn.net/github_39655029/article/details/128086542