当前位置: 首页 > news >正文

【Java】循环语句练习

文章目录

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

1. 计算5的阶乘

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

  • while循环实现
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循环实现
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 循环实现
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 循环实现
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出现了两次

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 整除的数都不是素数。

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的数,判断这些数中有哪些数是素数。

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
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
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

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 的值。

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 类型的。

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由用户输入。

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。

public class Test {//水仙花数//153 = 1^3 + 5^3 + 3^3public 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), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 “猜小了”, 如果输入的数字比该随机数大, 提示 “猜大了” , 如果输入的数字和随机数相等, 则提示 “猜对了” 。

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!!!✊

相关文章:

  • MIT 6.S081学习笔记(第三章)
  • 在vue或者react或angular中,模板表达式中的箭头函数是无效的吗?为什么无效?
  • Recovery介绍
  • Java 网络编程
  • 2023亚太杯数学建模C题思路分析 - 我国新能源电动汽车的发展趋势
  • EEG 脑电信号处理合集(2): 信号预处理
  • CentOS 7 使用cJSON 库
  • Navicat 技术指引 | 适用于 GaussDB 的模型功能
  • C# APS.NET CORE 6.0 WEB API IIS部署
  • C语言之内存函数
  • 第十二章 : Spring Boot 日志框架详解
  • 云原生Kubernetes系列 | Kubernetes静态Pod的使用
  • 基本数据结构二叉树(1)
  • qml ParticleSystem3D使用介绍
  • 初始化与反初始化
  • Apache的基本使用
  • extract-text-webpack-plugin用法
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 基本功--面试宝典
  • 关于字符编码你应该知道的事情
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于webpack 的 vue 多页架构
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用putty远程连接linux
  • 一、python与pycharm的安装
  • ​马来语翻译中文去哪比较好?
  • #includecmath
  • (1)(1.13) SiK无线电高级配置(五)
  • (C语言)fread与fwrite详解
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (层次遍历)104. 二叉树的最大深度
  • (分布式缓存)Redis哨兵
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • *上位机的定义
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .dwp和.webpart的区别
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET命令行(CLI)常用命令
  • .Net语言中的StringBuilder:入门到精通
  • 。Net下Windows服务程序开发疑惑
  • @Mapper作用
  • @RequestParam详解
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2]十道算法题【Java实现】
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [C#]DataTable常用操作总结【转】
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [CSS]文字旁边的竖线以及布局知识
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [hdu 1247]Hat’s Words [Trie 图]