【Java】循环语句练习

文章目录

  • [1. 计算5的阶乘](#1. 计算5的阶乘)
  • [2. 计算 1! + 2! + 3! + 4! + 5!](#2. 计算 1! + 2! + 3! + 4! + 5!)
  • [3. 数字9 出现的次数](#3. 数字9 出现的次数)
  • [4. 判定素数](#4. 判定素数)
  • [5. 求1-100之间的素数](#5. 求1-100之间的素数)
  • [6. 求2个整数的最大公约数](#6. 求2个整数的最大公约数)
  • [7. 计算分数的值](#7. 计算分数的值)
  • [8. 模拟登陆](#8. 模拟登陆)
  • [9. 输出乘法口诀表](#9. 输出乘法口诀表)
  • [10. 求出0~999之间的所有"水仙花数"并输出](#10. 求出0~999之间的所有“水仙花数”并输出)
  • [11. 猜数字游戏🙈](#11. 猜数字游戏🙈)

1. 计算5的阶乘

n! (阶乘),一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!,即n!=1×2×3×...×(n-1)×n。5! = 1×2×3×4x5。

  • while循环实现
java 复制代码
public class Test {
    //计算5的阶乘
    public static void main(String[] args) {
        int n = 1;
        int ret = 1;
        while(n<=5){
            ret *= n;
            n++;
        }
        System.out.println(ret);
    }
}
  • for循环实现
java 复制代码
public class Test {
    //计算5的阶乘
    public static void main(String[] args) {
        int ret = 1;
        for (int n = 1;n <= 5;n++){
            ret *= n;
        }
        System.out.println(ret);
    }
}

我们上一题学习了n阶乘的计算,这一题计算阶乘的和。阶乘的求和就是在计算阶乘的基础上再加一层循环。

2. 计算 1! + 2! + 3! + 4! + 5!

  • while 循环实现
java 复制代码
public class Test {
    //计算 1! + 2! + 3! + 4! + 5!
    public static void main(String[] args) {
        int i = 1;
        int sum = 0;
        //外层循环负责求阶乘的和
        while(i <= 5){
            int n = 1;
            int ret = 1;
            //内层循环负责完成求阶乘的细节
            while (n <= i){
                ret *= n;
                n++;
            }
            sum += ret;
            i++;
        }
        System.out.println("sum="+sum);
    }
}
  • for 循环实现
java 复制代码
public class Test {
    //计算 1! + 2! + 3! + 4! + 5!
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1;i <= 5;i++){
            int ret = 1;
            for(int n = 1;n <= i;n++){
                ret *= n;
            }
            sum += ret;
        }
        System.out.println("sum="+sum);
    }
}

3. 数字9 出现的次数

编写程序数一下 1到 100 的所有整数中出现多少个数字9

个位数为9的数字有9,19,29......99;个位数判断为 i % 10 == 9;

十位数为9的数字有91,92,93......99;十位数判断为 i % 10 == 9。

其中99出现了两次

java 复制代码
public class Test {
    public static void main(String[] args) {
        int count = 0;
        for(int i = 0;i <= 100;i++){
            if(i % 10 == 9){
                count++;
            }
            if(i / 10 == 9){
                count++;
            }
        }
        System.out.println(count);
    }
}

4. 判定素数

给定一个数字,判定一个数字是否是素数。

素数是只能被 1 和它本身整除的数。也就是说能被 2 到 n-1 整除的数都不是素数。

java 复制代码
import java.util.Scanner;

public class Test {
    //判断一个数是不是素数
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (i = 2;i < n ; i++) {
            if(i % n == 0){
                System.out.println(i+"不是素数");
            }
        }
        if(i == n){
            System.out.println(i+"是素数");
        }
    }
}

5. 求1-100之间的素数

上一题我们是从键盘输入一个数,判断是否为素数,而这一题则是在上一题的基础上从键盘输入1-100的数,判断这些数中有哪些数是素数。

java 复制代码
public class Test {
    public static void main(String[] args) {
        //打印1-100之间的素数
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for(int k = 1;k <= n;k++){
            int i = 2;
            for (i = 2;i < n ; i++) {
                if(k % i == 0){
                    break;
                }
            }
            if(i == k){
                System.out.println(k+"是素数");
            }
        }
    }
}
  • 优化1
java 复制代码
public class Test {
    //k = a * b
    //16 = 1 * 16
    //16 = 2 * 8
    //16 = 4 * 4
    //其中一定会有一个乘数小于k/2,所以我们将判断条件改为i <= k/2效率则更高
    public static void main(String[] args) {
        //打印1-100之间的素数
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for(int k = 1;k <= n;k++){
            int i = 2;
            for (i = 2;i <= k/2 ; i++) {
                if(k % i == 0){
                    break;
                }
            }
            if(i >k/2){
                System.out.println(k+"是素数");
            }
        }
    }
}
  • 优化2
java 复制代码
public class Test {
    //k = a * b
    //16 = 1 * 16
    //16 = 2 * 8
    //16 = 4 * 4
    //我们会发现一定会有一个值<=根号k
    //根号在java中需要调用Math.sqrt(k)
    public static void main(String[] args) {
        //打印1-100之间的素数
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for(int k = 1;k <= n;k++){
            int i = 2;
            for (i = 2;i <= Math.sqrt(k) ; i++) {
                if(k % i == 0){
                    break;
                }
            }
            if(i > Math.sqrt(k)){
                System.out.println(k+"是素数");
            }
        }
    }
}

6. 求2个整数的最大公约数

给定两个数,求这两个数的最大公约数

例如:

输入:20 40

输出:20

java 复制代码
public class Test {
    //辗转相除法求最大公约数
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int tmp = a % b;
        while(tmp != 0){
            a = b;
            b = tmp;
            tmp = a % b;
        }
        System.out.println(b);
    }
}

7. 计算分数的值

计算1/1-1/2+1/3-1/4+1/5 ...... + 1/99 - 1/100 的值。

java 复制代码
public class Test {
    public static void main(String[] args) {
        double sum = 0;
        int flg = 1;
        for (int i = 1; i <= 100 ; i++) {
            sum = sum + 1.0/i * flg;
            flg = -flg;//正负交替
        }
        System.out.println(sum);
    }
}

8. 模拟登陆

编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示"登录成功",密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序 。
字符串的比较不可以使用 == 而需要使用到 equals 库方法,equals方法是由 password 点出来的,password 是一个变量能点出一个方法是因为 password 是 string 类型的。

java 复制代码
public class Test {
    //模拟登录
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int count = 3;
        while (count != 0){
            System.out.println("请输入你的密码,你还有 "+ count +" 次机会!");
            String password = in.nextLine();
            if(password.equals("1234")){
                System.out.println("登录成功!");
                break;
            }else{
                System.out.println("密码错误!");
                count--;
            }
        }
    }
}

9. 输出乘法口诀表

输出n*n的乘法口诀表,n由用户输入。

java 复制代码
public class Test {
    //九九乘法表
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j+"*"+ i +" = " +j*i+" ");
            }
            System.out.println();
        }
    }
}

10. 求出0~999之间的所有"水仙花数"并输出

("水仙花数"是指一个三位数,其各位数字的立方和确好等于该数

本身,如:153=1^3+5^3+3^3 ,则153是一个"水仙花数"。)

一位自幂数:独身数

三位自幂数:水仙花数

三位的水仙花数共有4个:153,370,371,407。

java 复制代码
public class Test {
    //水仙花数
    //153 = 1^3 + 5^3 + 3^3
    public static void main(String[] args) {
        for (int i = 0; i < 999; i++) {
            int count = 0;//计算当前i 有几位数
            int tmp = i;
            while (tmp != 0) {
                count++;
                tmp = tmp / 10;
            }
            //count的值 是多少已经计算完成   i还是没有变的
            //计算i[tmp]的每一位
            tmp = i;
            int sum = 0;
            while (tmp != 0) {
                sum += Math.pow(tmp%10,count);
                tmp /= 10;
            }
            if(sum == i) {
                System.out.println(i);
            }
        }
    }
}


11. 猜数字游戏🙈

游戏规则:

系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "猜小了", 如果输入的数字比该随机数大, 提示 "猜大了" , 如果输入的数字和随机数相等, 则提示 "猜对了" 。

java 复制代码
import java.util.Random;
import java.util.Scanner;
public class Test {
    //猜数字游戏
    public static void main(String[] args) {
        Random random = new Random();
        int randNum = random.nextInt(100);//[0,100)
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入你要猜的数字: ");
            int num = scanner.nextInt();
            if(num > randNum){
                System.out.println("猜大了!");
            }else if (num == randNum){
                System.out.println("猜对了!");
                break;
            }else{
                System.out.println("猜小了!");
            }
        }
    }
}

浅玩一下吧

本章到这里就结束啦,如果有哪里写的不好的地方,请指正。

如果觉得不错并且对你有帮助的话请给个三连支持一下吧!

Fighting!!!✊

相关推荐
编码者卢布2 分钟前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
编码者卢布9 分钟前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
kaikaile199511 分钟前
结构风荷载理论与Matlab计算
开发语言·matlab
切糕师学AI19 分钟前
ARM 汇编器中的伪指令(Assembler Directives)
开发语言·arm开发·c#
q行44 分钟前
Spring概述(含单例设计模式和工厂设计模式)
java·spring
吕司1 小时前
Qt的信号与槽
开发语言·qt
詩不诉卿1 小时前
zephyr学习之自定义外部module记录
学习
浮游本尊1 小时前
React 18.x 学习计划 - 第十三天:部署与DevOps实践
学习·react.js·状态模式
好好研究1 小时前
SpringBoot扩展SpringMVC
java·spring boot·spring·servlet·filter·listener