当前位置: 首页 > 面试题库 >

Javafor循环(特别是for(;;))如何工作?

吕奇
2023-03-14
问题内容

通过一些旧的公司代码,我遇到了一个如下所示的for循环:

for (;;) {
    //Some stuff
}

我尝试了Google,但找不到任何答案。我是在编程课上睡着了还是这是一个不寻常的循环?


问题答案:

一个for在Java循环结构如下-

for (initialization statement; condition check; update)
loop body;
如你所见,这里有四个语句-

  1. 初始化语句:第一次进入循环时,该语句仅执行一次。这是一个可选语句,表示你可以选择将此字段保留为空白。它通常用于某些初始化目的。
  2. 有条件的检查:此语句可能是最重要的。它检查以验证某些表达式的计算结果是否为true。如果是,则循环执行继续。你可以选择将此字段保留为空,并将其评估为true。
  3. 更新:此语句列表从左到右执行,通常用于递增/递减某些变量。
  4. 循环主体:循环的主体,将根据条件检查的真值一次又一次地执行。
    基本上,这就是执行过程的方式-首先,当首次进入循环时,初始化语句执行一次。然后执行条件检查以查看其评估结果是否为true。如果是,则执行循环体,否则循环执行完成。之后,将执行Update语句。接下来,再次执行条件检查,如果评估结果为true,则再次执行循环主体,然后执行update语句,然后再次执行条件检查…。

现在介绍你的for( ; ; )语法。它没有初始化语句,因此将不会执行任何操作。它的条件检查语句也是空的,这意味着在执行循环体之后它的评估结果为true。接下来,由于更新语句为空,因此不执行任何操作。然后再次执行条件检查,这将再次评估为true,然后整个过程将再次重复。

因此,你看到的是,这基本上是一个无限循环,没有初始化语句,其条件检查将始终为true,并且没有更新语句。这相当于-

while(true)
{
    .....
}

这是Java中另一个流行的循环构造。

当使用这样的无限循环时,请务必注意中断条件,因为在大多数情况下,你不能让循环无限期地运行。要打破这些循环,可以使用break语句。结构如下-

if(some_condition_is_true)
    break;        // This will cause execution to break out of its nearest loop

要么

if(some_condition_is_false)
    break;


 类似资料:
  • 问题内容: 这是一个非常简单的for循环: 我知道它主要如何工作,但是我不明白最后的工作方式:如果我是对的,它应该加1,但是当它打印出时,它先打印0,然后再打印1。 为什么为什么不从1开始就因为?为什么仍然只打印出原始值而不是原始值? 问题答案: 一个循环的工作方式如下: 初始化完成(在您的情况下;仅执行一次) 条件检查(此处),如果条件为假,则退出循环 大括号内的代码已执行(根据您的情况) 更新

  • 问题内容: 我在进行函数调用时试图找到for-each循环的工作方式。请参阅以下代码, 在版本1中,我在for- each循环中调用returnArr()方法,在版本2中,我显式调用returnArr()方法并将其分配给数组,然后对其进行迭代。两种方案的结果都相同。我想知道哪个更有效以及为什么。 我认为版本2会更高效,因为我不会在每次迭代中都调用method。但是令我惊讶的是,当我使用版本1调试代

  • 问题内容: 我正在编写代码以确定nxn列表中的每个元素是否相同。即返回true,但将返回false。我正在考虑编写一个代码,当它发现与第一个元素不同的元素时立即停止。即: 我想停止此循环, 然后返回false。否则返回true。我将如何实施呢? 问题答案: 使用和为此。可以使用以下命令在Python中完成打破嵌套循环的操作: 另一种方法是将所有内容包装在函数中,并用于从循环中退出。

  • 问题内容: 我也在学习Java和android。我们可以在while循环中执行的几乎所有事情都可以在while循环中执行。 我发现一个简单的条件,使用while循环比for循环更好 如果我必须在程序中使用counter的值,那么我认为while循环要比for循环好 使用while循环 在这种情况下,我发现while循环要比for循环好,因为如果要在for循环中实现相同的效果,则必须将counter

  • 我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:

  • 问题内容: 通常我们这样编码: 但是也可以按照以下方式做一些事情: 我想要这样做的真正原因是因为我想使用python-progressbar的自动检测maxval。他们喜欢 问题答案: 您可以与callable一起使用。(您应该传递两个参数,一个用于可调用对象,另一个用于前哨值) 注意 当没有剩余元素并且没有放置哨兵值时,它将阻塞。另外,就像-循环,并且与普通的容器循环不同,它将从队列中删除项目。