java中可以用浮点作为循环变量吗_Java千问:Java循环语句的几个冷门知识点你都知道吗?...

我们在进行Java开发的时候,经常会用到循环结构,但是有几个关于循环的“冷门”知识点,不知道你是不是都已经掌握了呢?我们一起来看看

一、大括号可以不写吗?

我们都知道,如果每次循环过程中要执行的语句只有一条,那么就可以不用写大括号。但事实真的如此吗?请看下面的代码:

5dd2086d527af98d92cadb0c26838c51.png

大家可以看到,在循环中只有一条语句,但是并不能通过语法编译。这是为什么呢?因为Java语言规定:循环语句中重复执行的语句不能是一条单独的局部变量定义语句。这里所说的“定义局部变量语句”也可以指创建对象的语句,例如以下代码也不能通过编译:

f86312c65076fa89b0cb4d4107c65a2f.png

同时,这个规律还可以延伸到条件语句,也就是说,if语句中也不能只有一条单独的局部变量定义语句,例如以下代码:

04262ebe9d968e346e899996c82f88dd.png

如果我们在以上三段代码中,给循环或条件语句都添加了大括号,语法错误自然就消失了:

049440a1b9b62cf81ae486954887c9d6.png

二、如何定义多个循环变量?

我们平时定义的循环往往只有一个循环变量

96f3227767c314f6cba967257e7fc48d.png

例如在这个循环中,变量i就是一个循环变量。但是,如果开发过程中,需要我们在一个循环中定义并操作多个循环变量该怎么办呢?这时候,我们可以把多个循环变量的定义语句用逗号隔开,并且对循环变量的操作语句也用逗号隔开就可以了。我们以定义并操作两个循环变量为例作为示范,请看以下代码:

ea3e9fa2e0c946287a779389c9d9b5d7.png

需要说明的是:for循环结构只能有两个分号(;),并且明确规定第一个分号前面的部分是用来定义并初始化循环变量的。我们知道,一个分号其实就表示一条语句的结束。所以说,第一个分号前面定义并初始化循环变量的语句只能有一条。既然只能有一条语句来定义循环变量,那么如果需要定义多个循环变量的话,这些循环变量只能同属一种类型,因为多种类型的循环变量必须要用多条语句来定义。如果实在需要定义多个类型不相同的循环变量,我们可以干脆在循环语句之前就把这些变量都定义好。

三、能否以浮点数作为循环变量?

我们通常都会把循环变量定义为整数类型,如果把循环变量定义为浮点数可以吗?我们来做个实验,请看以下代码

7054f41c73f6a0c9a6f7f443f5ee0c05.png

这段代码想必大家都能看懂,那么这段代码能否正常执行呢?答案是没问题,它的执行效果如下:

f3195e745b1629e04098839a81802a6e.png

很多人通过这个实验就下定结论认为以浮点数作为循环变量没有什么问题,但是我们必须清楚:当一个浮点数大到一定程度的时候,就会导致精度的丢失,从而出现一些奇怪的错误。比如,我们把上面代码中start变量的初始值改成999999999;在这种情况下,重新运行程序,你会发现程序没有任何输出。为什么没有任何输出呢?变量f的初始值是start,而浮点数大到一定程度的时候,因为丢失了精度,会导致虚拟机错误的以为”f”与”start+5”的值是相同的,所以”f

但是,如果我们把循环条件从” f

我们通过这个例子想告诉大家:如果没有十分的必要,不要使用浮点数作为循环变量,即使非要用浮点数充当循环变量,也一定要注意数值范围不能太大,否则会因为精度丢失而出现一些奇怪的现象。

四、内层循环如何控制外层循环?

我们都知道,在Java语言中,有两个能够控制循环执行的关键字,分别是break和continue。通常情况下,这两个关键字所控制的都是本层循环的执行,并不能控制到外层循环。但如果我们希望通过这两个关键字控制外层循环的执行,可以先给外层循环添加一个“标签”,通过在break或者是continue后面加标签,达到控制外层循环的目的。我们来看如下代码:

fda4a45b7e07b37c8d5e1177ca8c60eb.png

在这段代码中,我们给内外两层循环都加上了标签,分别叫做inner和outer。我们在内层循环中,当”j==4”的情况下执行continue语句,并且在continue的后面加上外层循环的标签outer,就能控制外层循环结束本次循环,直接进入下一次循环,因此循环代码执行过程中,不会在控制台上打印出”test”。其执行结果如下:

1c35f2539ee3cb2cb89b908726a974cb.png

同理,我们如果把代码中才”continue”换成”break”,也能够在内层循环中直接跳出外层循环。

虽然从技术角度来说,Java语言能够实现在内层循环中控制外层循环,但是从程序设计的角度来讲,并不提倡这么做,因为我们更希望每一层循环“各司其职”,完成好自己的工作,如果需要从内层循环中直接中止外层循环的执行,可以设置一个局部变量,内层循环修改局部变量,而外层循环通过判断局部变量的值来决定是否结束本层循环,这样代码的结构性和可读性都会更好。

如想系统学习Java编程,欢迎观看我在本站的视频课程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各个大学的录取通知书,哪个颜值最高?

近段时间,各大高校纷纷开始晒出自家的录取通知书,快来和小天一起评评哪家的颜值最高!北京工业大学北京科技大学东南大学复旦大学哈尔滨工业大学南京农业大学南开大学清华大学天津大学西安交通大学中国传媒大学北京航空航天大学这不仅仅是一纸…

java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...

最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习…

有关堆栈溢出(in vs 2005)的读书笔记--堆栈中 申请大数组

部分原创 66下一步 Vs 堆栈 理论修改的上限是多少 ? 问题2: 全局变量去 最大的上限是多少? 堆栈(休养版本测试) 2012年3月31日17:31:27 3月 从 10^5到 10^6数组,导致vs… 当前:搭好脚手架…

烧脑又过瘾!这个被严重低估的学习方法,看完瑟瑟发抖!

▲ 点击查看科学家曾在基于脑科学和认知科学后得出一个“学习的金字塔”理论。就是下面这张图:最顶端的就是我们所谓的“知识”,但为了可以达到这个顶端,下面有一系列的支撑能力。而引申出来的核心概念,就叫“玩中学”。不要想当然…

java中统计括号配对_括号配对问题(C语言或JAVA语言代码)

描述现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0"]", "(", ")" 四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出…

arguments.callee()事例 参数检验

<script>var abcfunction(x){if(x<2) return 1;else return x*arguments.callee(x-1);}var yabc(5);alert(y); </script>参数检验 <script>function check(args){var actualargs.length; //实际的参数长度var expectedargs.callee.length; …

Docker基础操作命令与常用容器创建

常用操作命令 docker search docker pull docker save docker load docker rm/rmi docker ps docker images docker create --name 容器 ... docker container ls docker stop/start/pause/unpause 容器名 docker exec -it 容器名 运行命令&#xff08;如&#xff1a;bash,red…

java号段_JAVA手机号正则(多号段)

import java.util.regex.Pattern;/*** author: Lindsay* Date: 2018/9/19 16:23* Description: 手机号正则*/public class PhoneRegUtils {/*** 是否是合法的手机号** param phone* return*/public static boolean isLegalPhoneNumber(String phone) {/*** 中国电信&#xff1a…

hdu 1863(最小生成树kruskal)

/*Name: hdu1863畅通工程 Author: Try86Date: 10/04/12 12:43Description: 最小生成树(kruskal) */ #include <cstdio> #include <iostream>using namespace std;const int M 5050;int p[M], sum; //sum统计顶点个数 struct edge {int a;int b;int w; }e[M];int…

java第二版课后题答案_Java语言程序设计第2版第16章 课后习题答案

《Java语言程序设计第2版第16章 课后习题答案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《Java语言程序设计第2版第16章 课后习题答案(62页珍藏版)》请在人人文库网上搜索。1、第1章 Java语言概述选择题1-1 在下列概念中&#xff0c;Java语言只保留了(B)A. 运算符…

为什么手机最后 10% 的电量很不耐,最后1%的电量最耐用?

全世界只有3.14 % 的人关注了爆炸吧知识手机电量这玩意一直都是个玄学问题。为什么我的小手机&#xff0c;最后 1% 的电量最耐用&#xff0c;每次都够我看完一个十分钟的视频。又或者是为什么我的小手机&#xff0c;最后 10% 的电量很不耐用。。。每次电池报警还有 10% 的电量&…

HP 1020

HP 1020 先卸三颗螺丝 两根铁销 把盖子拔出 弹簧拔出 把硒鼓一分为二&#xff0c;有感光器的为废粉&#xff0c;倒出来&#xff0c;搽干净感光器 另外一个倒入干净的粉&#xff0c;小心不要把齿轮那面拆开了 倒好粉&#xff0c;合起来 合起来要先扣上弹簧&#xff0c;再按上盖…

使用identity+jwt保护你的webapi(三)——refresh token

前言上一篇已经介绍了identity的注册&#xff0c;登录&#xff0c;获取jwt token&#xff0c;本篇来完成refresh token。开始开始之前先说明一下为什么需要refresh token。虽然jwt token有很多优点&#xff0c;但是它的缺点也是非常明显。由于jwt无状态的特性&#xff0c;所以j…

窗体的关闭事件

对于关注对 Windows 窗体应用程序中引发的每个事件按次序进行处理的开发人员来说&#xff0c;事件引发的顺序特别重要。 当 Windows 窗体应用程序启动时&#xff0c;主窗体的启动事件按以下顺序引发 1、System.Windows.Forms.Control.HandleCreated    在为控件创建句柄时发生…

python多线程 不在main_从python线程(不是main)启动pyQt线程有什么不...

我有一个想要向其添加基本状态窗口的python控制台脚本,因此在不了解pyqt的情况下,我添加了一个窗口.如果我从主线程启动pyqt,它将阻塞其他所有内容,因此我从另一个线程启动了它.这样的运行情况已经好几个月了,但我只是注意到了一个警告(不确定我以前怎么错过它)&#xff1a;警告…

java设置窗口不可移动_Java – JDialog不可移动

什么代码有助于使JDialog无法移动&#xff1f;我看了两个选项&#xff1a;> setUndecorated(true);哪个有效,但删除了所有的装饰.> addComponentListener并覆盖componentMoved()方法,这会导致JDialog随后在移动时调用induEpilepticSeizure().有任何想法吗&#xff1f;解决…

一个10*10的正方形里,最多可以放多少个直径为1的圆?为啥不是100个?

祝大家元宵节快乐知识君曾经给大家出了一道题。↓Q&#xff1a;在一个10*10的正方形里&#xff0c;最多可以放多少个直径为1的圆&#xff1f;为啥不是100个&#xff1f;关于这道题&#xff0c;后台就收到了许多留言&#xff0c;大家纷纷给出了不同的答案。五花八门的答案&#…

.NET 时间格式 ----------摘自MSDN

使用在 DateTimeFormatInfo 的属性中存储的标准或自定义模式设置 DateTime 值的格式。 可以通过设置可写 DateTimeFormatInfo 的关联属性用自定义模式替代标准模式。若要确定 DateTimeFormatInfo 是否是可写的&#xff0c;请使用 IsReadOnly 属性。 下表列出了每一种标准模式的…

小甲鱼零基础入门python二十一课课后题_小甲鱼Python第二十一讲课后习题

测试题&#xff1a;0. 递归在编程上的形式是如何表现的呢&#xff1f;在编程上&#xff0c;递归表现为函数调用本身这么一个行为。1. 递归必须满足哪两个基本条件&#xff1f;一、 函数调用自身二、 设置了正确的返回条件2. 思考一下&#xff0c;按照递归的特…

MVC捕获数据保存时的具体字段验证错误代码

捕获验证错误代码 //try //{ // // 调试写数据库 //} //catch (DbEntityValidationException dbEx) //{ //}转载于:https://www.cnblogs.com/caojinqin/p/4561000.html