一点思考|工作十几年了,竟从未用过do-while!
时间:2022-07-24
本文章向大家介绍一点思考|工作十几年了,竟从未用过do-while!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近在看 Java 的基础知识,其中有部分是关于循环的,在 Java 中,循环的语法总共分为 3 种: for
、 while
、 do-while
,如下图所示:
但我惊奇的发现,在之前的职业生涯中(11 年),竟从未用过 do-while
(尴尬),于是问了群里的小伙伴,发现也是鲜有人用。
do-while 语法分析
我们先来了解一下 do-while 的语法:
do {
// statements
} while (expression);
注意:最后一个冒号不能省略,否则会提示编译出错。
它的执行流程如下图所示:
那它究竟在什么地方用呢?
do-while 使用场景
在我多次的搜索和请教下,终于找到了两个相对满意的使用场景,接下来一起来看。
使用场景一:抢票
对于抢票业务来说,无论三七二十一,先抢了再说,然后在判断是否抢票成功,如果抢票成功则退出循环,否则继续执行抢票,实现的伪代码如下所示:
do {
// 抢票代码...
} while (没抢到票);
思路提供者:贾总
使用场景二:进制转换
经过大量搜索发现,在 JDK 的源码中,也存在少量使用 do-while
的场景,比如 Integer
中进制转换,相关源码如下:
static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
int charPos = len;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[offset + --charPos] = Integer.digits[val & mask];
val >>>= shift;
} while (val != 0 && charPos > 0);
return charPos;
}
比如十进制转二进制就会执行此方法,在进制转换的业务中,无论任何情况,一定会至少执行一次进制转换的,因此这种业务场景就非常适合 do-while
。
总结
孔子说:温故而知新。当我们学完很多知识之后,回过头来再琢磨这些知识,发现很有趣,这就是知识的一大乐趣吧。本文我们介绍了两种 do-while
的使用场景,抢票和进制转换,你还知道哪些 do-while
的使用场景吗?欢迎评论区告诉我~
- Pandas DataFrame笔记
- 让控件填满整个页面
- 用多个类别来进行微调
- Asp.Net4.0/VS2010新变化(2):网站自动预热
- Asp.Net4.0/VS2010新变化(1):web.config与publish
- 任天堂将推出Nintendo Labo 域名保护意识墙
- 表格效果
- ROR学习笔记(2):Asp.Net开发者看ROR
- 图片的javascript延时加载
- 全世界最短IE判定if(!+[1,])的解释
- Log4Net与Log2Console配合时中文问题的解决
- 如何改变AspNetPager当前页码的默认红色?
- Flash/Flex学习笔记(48):反向运动学(下)
- 如何给sublime text3安装汉化包?so easy 哦
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决数独问题用人工智能还是量子计算?
- Leetcode 39. 组合总和(dfs)
- 短视频APP制作,设置高斯模糊
- 使用 Sunny-Ngrok 将内网程序发布到外网
- Leetcode 17. 电话号码的字母组合 (dfs)
- Java实现md5和base64加密解密的示例代码
- Spring 基于 XML 的 AOP
- SpringBoot 集成 Apache Camel FTP 实现文件同步
- Spring 基于 XML 的 IOC
- 初识 Spring
- Leetcode 55. 跳跃游戏 (贪心)
- SpringBoot 报 No operations allowed after connection closed 异常解决办法
- Leetcode 15 三数之和(双指针,去重)
- 洛谷 P1886 滑动窗口 /【模板】单调队列 (单调队列、线段树、RMQ(ST表))
- SpringBoot 整合 JMSTemplate