在Java中的循环

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)

循环的使用是编程语言的一种功能,它有助于在某些条件评估为真时重复执行一组指令/函数。
Java提供了三种执行循环的方法。虽然所有的方式提供了类似的基本功能,但它们的语法和条件检查时间不同。

Java中有三种主要的循环结构:

  • while 循环
  • do…while 循环
  • for 循环

在Java5中引入了一种主要用于数组的增强型for循环。还有一般用于遍历遍历数组或集合类(例如,ArrayList)的For-each循环。

while循环

while循环是一个控制流语句,它允许代码根据给定的布尔条件重复执行。while循环可以被认为是重复的if语句。
句法 :

while(布尔条件)
{
   循环语句...
}

流程图:
在Java中的循环

  • While循环从检查条件开始。如果它评估为true,则执行循环体语句,否则执行循环后面的第一条语句。由于这个原因,它也被称为入口控制回路
  • 一旦条件评估为true,循环体中的语句就会被执行。通常,语句包含正在为下一次迭代处理的变量的更新值。
  • 当条件变为假时,循环终止,标志着其生命周期的结束。
// Java program to illustrate while loop
class whileLoopDemo
{
    public static void main(String args[])
    {
        int x = 1;
 
        // Exit when x becomes greater than 4
        while (x <= 4)
        {
            System.out.println("Value of x:" + x);
 
            // Increment the value of x for
            // next iteration
            x++;
        }
    }
}

输出:

Value of x:1
Value of x:2
Value of x:3
Value of x:4

for循环

for循环提供了编写循环结构的简洁方法。与while循环不同,for语句消耗了一行中的初始化,条件和递增/递减,从而提供了一个更短,更易于调试的循环结构。
句法:

for (initialization condition; testing condition; 
                              increment/decrement)
{
    statement(s)
}

流程图:
在Java中的循环

 

  1. 初始化条件:在这里,我们初始化正在使用的变量。它标志着for循环的开始。一个已经声明的变量可以被使用,或者一个变量可以被声明,本地只能被循环使用。
  2. 测试条件:它用于测试循环的退出条件。它必须返回一个布尔值。它也是一个入口控制环,因为在执行循环语句之前检查了条件。
  3. 语句执行:一旦条件评估为true,循环体中的语句就会被执行。
  4. 递增/递减:它用于更新下一次迭代的变量。
  5. 循环终止:当条件变为假时,循环终止标记其生命周期的结束。
// Java program to illustrate for loop.
class forLoopDemo
{
    public static void main(String args[])
    {
        // for loop begins when x=2
        // and runs till x <=4
        for (int x = 2; x <= 4; x++)
            System.out.println("Value of x:" + x);
    }
}

输出:

Value of x:2
Value of x:3
Value of x:4

增强For循环

Java还包括在Java 5中引入的另一个版本的for循环。Enhanced for循环提供了一种更简单的方式来遍历集合或数组的元素。它是不灵活的,只有在需要以顺序方式迭代元素而不知道当前处理元素的索引时才应该使用它。
句法:

for (T element:Collection obj/array)
{
    statement(s)
}

让我们举一个例子来演示如何使用增强的循环来简化工作。假设有一个名称数组,我们希望打印该数组中的所有名称。让我们看看这两个示例的不同之处
Enhanced for循环简化了以下工作:

// Java program to illustrate enhanced for loop
public class enhancedforloop
{
    public static void main(String args[])
    {
        String array[] = {"Ron", "Harry", "Hermoine"};
 
        //enhanced for loop
        for (String x:array)
        {
            System.out.println(x);
        }
 
        /* for loop for same function
        for (int i = 0; i < array.length; i++)
        {
            System.out.println(array[i]);
        }
        */
    }
}

输出:

Ron
Harry
Hermoine

基本for循环的一些常见误区,可以参照:在Java中的For循环

do while 循环

do while循环与while循环相似,只是它在执行语句之后检查条件,因此是Exit Control Loop的一个示例。
句法:

do
{
    statements..
}
while (condition);

流程图:
在Java中的循环

  1. while循环从执行语句开始。第一次没有检查任何情况。
  2. 执行完语句并更新变量值后,将检查条件是否为真或假值。如果评估为真,则开始下一次循环迭代。
  3. 当条件变为假时,循环终止,标志着其生命周期的结束。
  4. 请注意do-while循环在检查任何条件之前至少会执行一次它的语句,因此是退出控制循环的一个示例。
// Java program to illustrate do-while loop
class dowhileloopDemo
{
    public static void main(String args[])
    {
        int x = 21;
        do
        {
            // The line will be printed even
            // if the condition is false
            System.out.println("Value of x:" + x);
            x++;
        }
        while (x < 20);
    }
}

输出:

Value of x: 21

For-each循环

For-each循环一般用于遍历数组或集合类(例如,ArrayList)。

句法:

for (type var : array) 
{ 
    statements using var;
}

相当于:

for (int i=0; i<arr.length; i++) 
{ 
    type var = arr[i];
    statements using var;
}

For-each循环的实例:

// Java program to illustrate
// for-each loop
class For_Each    
{
    public static void main(String[] arg)
    {
        {
            int[] marks = { 125, 132, 95, 116, 110 };
              
            int highest_marks = maximum(marks);
            System.out.println("The highest score is " + highest_marks);
        }
    }
    public static int maximum(int[] numbers)
    {
        int maxSoFar = numbers[0];
          
        // for each loop
        for (int num : numbers)
        {
            if (num > maxSoFar)
            {
                maxSoFar = num;
            }
        }
    return maxSoFar;
    }
}

输出:

The highest score is 132

但是for-each也有其局限性,更多可以参照:在Java中的For-each循环

循环的陷阱

无限循环:实现任何类型的循环时最常见的错误之一是,它可能永远不会退出,也就是循环运行无限的时间。出于某种原因,条件失败时会发生这种情况。
例子:

//Java program to illustrate various pitfalls.
public class LooppitfallsDemo
{
    public static void main(String[] args)
    {
 
        // infinite loop because condition is not apt
        // condition should have been i>0.
        for (int i = 5; i != 0; i -= 2)
        {
            System.out.println(i);
        }
        int x = 5;
 
        // infinite loop because update statement
        // is not provided.
        while (x == 5)
        {
            System.out.println("In the loop");
        }
    }
}

另一个缺陷是你可能通过循环向你的collection对象中添加了一些东西,你可能会用完内存。如果尝试执行下面的程序,一段时间后,内存不足异常将被抛出。

//Java program for out of memory exception.
import java.util.ArrayList;
public class Integer1
{
    public static void main(String[] args)
    {
        ArrayList<Integer> ar = new ArrayList<>();
        for (int i = 0; i < Integer.MAX_VALUE; i++)
        {
            ar.add(i);
        }
    }
}

输出:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at article.Integer1.main(Integer1.java:9)
  •   本文标题:在Java中的循环 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/3782.html

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读