首页 > 编程语言 >Java千问13:Java循环语句的几个冷门知识点你都知道吗?

Java千问13:Java循环语句的几个冷门知识点你都知道吗?

时间:2022-12-28 12:36:38浏览次数:60  
标签:语句 知识点 13 Java 变量 代码 外层 循环 定义

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

一、大括号可以不写吗?

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_循环


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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_循环_02

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_循环_03

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_循环_04


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

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_Java_05

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_Java_06

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


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

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_Java_07

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_Java_08

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

但是,如果我们把循环条件从” f<start+5”改成”f<start+50”,这个循环又会变成无限循环(死循环),为什么呢?就是因为,很大,它会被保存为”1.0E9”。而执行了”f++”之后,由于精度的丢失,f的值仍然被保存为”1.0E9”,跟循环之前没有任何变化,所以循环条件总是成立的,因此循环才变成了死循环。

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


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

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_循环_09

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

Java千问13:Java循环语句的几个冷门知识点你都知道吗?_Java_10

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

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

如果想系统学习Java编程可以点击这里观看我在本站的视频课程。


标签:语句,知识点,13,Java,变量,代码,外层,循环,定义
From: https://blog.51cto.com/mugexuetang/5974276

相关文章

  • 解密随机数生成器(二)——从java源码看线性同余算法
    RandomJava中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linearcongruentialformula线性同余方程(DonaldKnuth的编程艺术的3.2.1节)如果两个Random实例使......
  • Java千问14:学透Java自增自减运算符,看这一篇就够了!
    ​同很多高级编程语言一样,Java语言的运算符系统当中也有自增(++)和自减(--)这两个运算符。很多小伙伴对这两个运算符都深感头疼,并且很多公司在面试的时候也经常会问到与之相关......
  • P5137 题解
    前言首先感谢所有帮助我卡常的大佬们。题意求\((\sum_{i=0}^{n}a^ib^{n-i})\modp\)的值(\(n\leq10^{18}\),\(p\)不一定为质数)。分析看到数据范围,首先想到快......
  • javascript 事件循环
    JavaScript的运行顺序就是完全单线程的异步模型:同步在前,异步在后。所有的异步任务都要等待当前的同步任务执行完毕之后才能执行。JavaScript是单线程执行内容分为普通代......
  • Java环境的搭建
    JDK(JAVADevelopmentKitJava开发工具包)JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:......
  • Java千问11:instanceof运算符用法详解
    ​Java语言当中提供了一个叫做instanceof的运算符。很多教科书上对这个运算符的介绍并不详细,只是简单的说这个运算符是用来判断某个对象是不是属于某种类型。我们现在就用一......
  • 【木棉花】基于JAVA UI开发的小游戏——推箱子(上)
    前言在上期文章中,分享了关于项目的效果预览图,从这一期开始,将逐步分享这个项目的构建流程。实际上,笔者在进行开发的过程中,并不是写完一个界面的内部逻辑,就开始对界面进行美......
  • java stream map和 flatmap区别
    区别:mapmapper返回R,flatMapmapper返回Stream<R>官网解释1,<R> Stream<R>flatMap(Function<?super T,?extends Stream<?extendsR>> mapper) Returnsastream......
  • Java HashMap原理
    HashMap是Java中用于实现映射关系的一种数据结构。它允许将一个对象(称为键)映射到另一个对象(称为值)。当需要访问值时,可以使用键来查找值。HashMap的实现原理是使用散列函数......
  • Java千问09:你真的掌握了Java语言的==吗?我看未必!
    很多程序设计语言都使用”==”来判断两个数据是否相等,我们在编程中也经常使用这个运算符,以至于对它已经熟视无睹。那么是不是任意两个数据都可以使用”==”来判断相等呢?”==......