📜  JS++ |循环

📅  最后修改于: 2022-05-13 01:55:31.784000             🧑  作者: Mango

JS++ |循环

在计算机编程中经常发生您希望一段代码多次执行的情况。循环是允许您处理此类情况的编程语句。 JS++ 包含各种循环,我们将在本教程中介绍其中的几个。然而,我们将首先检查两个非常常用的表达式以促进循环的使用:递增运算符“++”和递减运算符“-”。

注意:我们将在本教程中研究的递增和递减运算符以及循环语句的工作方式与它们在 JavaScript、 Java、C++ 和 C# 等语言中的对应项类似。

“++”和“-”

为了展示这些运算符的实际作用,让我们举个例子。创建一个新文件夹并将其命名为“Loops”。然后创建一个新文件并将其命名为“Loops.jspp”。编写以下代码:

external $;

int i = 0;
$("#content").append("i is now ", i, "; ");
++i;
$("#content").append("i is now ", i, "; ");
--i;
$("#content").append("i is now ", i, "; ");

将 Loops.jspp 保存到 Loops 文件夹。然后创建第二个名为“Loops.html”的文件并写入以下内容:


Loops program

将 Loops.html 保存到 Loops 文件夹。编译 Loops.jspp,然后在浏览器中打开 Loops.html。您的文档应显示“++”将i的值增加 1,而“-”将i减少 1。

与其他各种编程语言一样,“++”和“–”可以在变量之前或之后使用。为了说明这些“前缀”和“后缀”用法之间的区别,请将 Loops.jspp 中的代码更改为以下内容:

external $;

int i = 0;
int j = 0;
j = ++i;
$("#content").append("j is now ", j, ", and i is now ", i, "; ");    
j = i++;
$("#content").append("j is now ", j, ", and i is now ", i, "; ");

变量i第一次通过使用前缀递增运算符递增。这意味着i在语句中使用它的值之前递增,因此j的值设置为 1。相比之下,当i第二次递增时,它是通过使用后缀递增运算符。这意味着i在语句中使用其值递增,因此j的值保持为 1。前缀/后缀的区别以完全相同的方式应用于减量运算符的两个版本。

“同时”和“做……同时”

现在让我们看看如何在循环中使用递增和递减运算符。我们将在本教程中研究三种类型的循环: while循环、 do... while循环和for循环。我们从while循环开始。

while循环的目的是让一些代码——循环体——在特定条件为真时重复执行。当条件不再为真时,循环体停止执行。

While Diagram

让我们举个例子。将 Loops.jspp 中的代码更改为以下内容:

external $;

int i = 0;
while (i < 3){
    $("#content").append("i is now ", i, "; ");
    i++;
}

在这里,我们看到了while循环的语法: while关键字,后跟一对括号,其中包含要检查的条件,然后是花括号中的代码块,只要条件为真,它将重复执行。

在这个例子中,循环执行了三次:当i为 0 时执行一次,当i为 1 时执行第二次,当i为 2 时执行第三次。在第三次执行期间, i递增到 3;这意味着当下一次检查条件( i < 3 )时,发现它为假并且循环终止。

如果while循环中的条件从一开始就为假,会发生什么?如果是这样,循环体将不会执行。您的程序的执行只是继续执行循环之后的第一条语句。这可能正是您想要的行为;在其他情况下可能不是。相反,如果您希望循环在检查条件是否为真之前至少执行一次,则可以使用另一种循环: do... while循环。

将 Loops.jspp 中的代码更改为以下内容:

external $;

int i = 0;
do {
    $("#content").append("i is now ", i, "; ");
    i++;
}
while (i > 10);

do... while循环中,循环体写在do关键字之后,但要检查的条件之前。即使在第一次检查时条件为假,循环也至少执行一次,如本例所示。当发现条件为假时,循环终止。

Do While Diagram

“为了”

for循环在一个重要方面与whiledo... while循环不同: for循环的语法是专门为方便使用计数器变量而设计的。我们来看一个例子:

external $;

for (int i = 0; i < 2; i++) {
    $("#content").append("i is now ", i, "; ");
}

如本例所示, for循环的语法比whiledo... while循环的语法要复杂一些,因此我们将花更多时间来了解它。我们可以看到for循环以for关键字开头,然后是括号中的一些代码。括号中的代码由三个部分组成,用分号分隔。第一部分是初始化组件,我们在其中声明我们的计数器变量:

int i = 0;

第二部分是条件组件,它提供了一个测试来确定循环应该何时终止:

i < 3;

第三部分是更新组件,它通常会增加或减少计数器变量:

i++

括号中的代码之后是循环体,在一对花括号中。循环体由要执行的语句组成。

for循环如下进行(另见下图)。首先,初始化计数器变量。其次,检查条件。如果为假,则循环终止;如果为真,则循环继续到下一步。第三,循环体执行。第四,更新组件执行。第五,循环返回到第二步并重复,直到条件变为假。

在我们的示例中,循环体执行了两次:一次是在计数器变量i为 0 时,另一次是在i为 1 时。第二次执行后,更新组件将i递增到 2。这意味着当条件i < 2被检查时,发现为假,循环终止。

注意:初始化、条件和更新组件for严格来说, for循环都是可选的,尽管人们通常希望包含它们。有关非标准用途的更多信息,请参阅:

JS++ for 循环

“中断”和“继续”

breakcontinue关键字为您使用循环提供了额外的灵活性,并且两者都可以用于我们研究过的所有类型的循环中。但是,理解breakcontinue之间的区别很重要: break用于立即终止循环,而continue用于跳到下一次迭代。

为了说明差异,让我们举一个涉及while循环的示例:

external $;

int i = 0;
while (i < 3) {
    i++;
    if(i == 2) {
        break;
    }
    $("#content").append("i is now ", i, "; ");
}

如果将此代码写入 Loops.jspp,对其进行编译,然后在浏览器中打开 Loops.html,它将显示“i is now 1;”。由于使用了break ,循环在第二次迭代中途终止,因此它不会显示更多内容。但是,如果您删除break并将其替换为continue ,您将看到不同的结果: Loops.html 显示“i now 1;我现在 3 岁;”。这表明continue不会完全终止循环;它仅终止当前迭代,以便循环跳到下一次迭代。

嵌套和标记循环

循环可以嵌套,这意味着将一个循环放入另一个循环中。下面是一个嵌套for循环的示例:

external $;

for (int i = 0; i < 2; i++) {
    $("#content").append("i is now ", i, "; ");
    for (int j = 0; j < 2; j++) {    
        $("#content").append("j is now ", j, "; ");
    }
}

在这种情况下,对于外循环的每次迭代,内循环都会运行它的所有迭代。在这种情况下,外循环执行两次,对于这两次执行中的每一次,内循环执行两次。因此,内循环总共执行了四次。

如果你想在嵌套循环中使用breakcontinue标记你的循环会很有用。例如,考虑在嵌套循环中使用这种break

external $;

outer: for (int i = 0; i < 2; i++) {
    $("#content").append("i is now ", i, "; ");
    inner: for (int j = 0; j < 2; j++) {    
        if(j == 0) {
            break outer;
        }
        $("#content").append("j is now ", j, "; ");
    }
}

通过将outer循环标记为 external ,我们可以在内部循环中使用break语句时引用该循环。因此,这种break的使用终止了外部循环,而不仅仅是内部循环。如果我们没有使用标签, break将引用内部循环,因为默认情况下, break引用它发生的最内层循环。并行注释适用于continue :默认情况下,它指的是它发生的最内层循环,但它也可以通过标签显式地引用一个外层循环。