使用编译时间常数循环时
原文:https://www . geesforgeks . org/while-loop-with-compile-time-constants/
While 循环是一个控制流语句,允许基于给定的布尔条件重复执行代码。while 循环可以看作是一个重复的 if 语句。它主要用于预先确定迭代次数的情况。下图说明了 while 循环:
语法:
while(test_expression)
{
// statements
update_expression;
}
程序 1: 下面是实现基本 while 循环的程序:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to illustrate the
// while loop
class GFG {
// Driver Code
public static void main(String args[])
{
// Initialization expression
int i = 1;
// Test expression
while (i < 6) {
System.out.println("Hello World");
// Update the expression
i++;
}
}
}
Output:
Hello World
Hello World
Hello World
Hello World
Hello World
带布尔值循环
程序 1: 下面是另一个 while 循环的例子,其中在 test_expression 部分使用了一个布尔变量:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate while loop
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
boolean flag = false;
while (flag) {
System.out.println(
"While Loop Executed");
}
System.out.println("Done!");
}
}
Output:
Done!
解释:上面的代码工作正常,因为标志不是编译时常数。该标志的值为 false,因此不会执行 while 循环。
程序 2: 下面是 while 循环的例子,其中在 test_expression 部分使用了一个常量布尔值,而不是像上面的例子那样使用布尔变量。
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the
// above statement
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
while (false) {
System.out.println(
"While Loop Executed");
}
System.out.println("Done!");
}
}
输出:
解释:上述代码在循环不可达的情况下无法编译为内部代码。
程序 3: 下面是演示 test_expression 为“真”时的场景的程序:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the
// above statement
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
while (true) {
System.out.println(
"While Loop Executed");
}
System.out.println("Done!");
}
}
输出:
解释:在上面的代码中,while 循环将被成功编译,但是它将结束于一个无限循环中,因此 while 循环之后的代码是不可达的。因此,它也会导致编译错误。
程序 4: 下面是上面程序的另一个版本,while 循环中有一个 break 语句:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the
// above approach
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
while (true) {
System.out.println(
"Inside Loop");
break;
}
System.out.println("Done!");
}
}
Output:
Inside Loop
Done!
解释:在上面的程序中,如果 while 循环包含 break 语句,那么编译不会失败,因为在某些情况下,循环后的代码是可以到达的。这里,我们将从 while 循环中出来,并执行 print 语句。
编译时常数:
编译时常数是指其各自值在编译时已知的常数。原始数据类型和字符串的最终变量可以是编译时常数。它们必须用它们的声明初始化。下面是编译时常数的示例:
final int i = 100;
final String str = "Hello";
以下不是编译时常数:
final int j;
j = 10;
final Integer k = 20;
程序 1: 假设使用 while 循环内部的一个最终变量作为条件变量。下面是同样的程序来说明:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the
// while loop with compile-time
// constant
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
final boolean flag = false;
while (flag) {
System.out.println(
"Inside Loop");
}
System.out.println("Done!");
}
}
输出
说明:由于标志是最终变量,所以是编译时常量。由于标志的值无法更改,while 循环中的代码不可访问。这就是为什么它无法编译。
程序 2: 如果最终变量在声明时没有初始化,那么它就不是编译时常数。下面是同样的程序来说明:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the
// above statement
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
final boolean flag;
flag = false;
while (flag) {
System.out.println("Inside Loop");
}
System.out.println("Done!");
}
}
Output:
Done!
说明:在上面的程序中,由于标志在声明时没有初始化,所以不会出现编译错误。它在单独的一行中初始化。因此,在这种情况下,标志不是编译时常数,不会有任何编译错误。
注 : 同样,如果最终标志变量的值为真,并且在声明时进行了初始化,那么 while 块之后的代码将无法编译。但是,如果最终布尔标志的值在单独的一行中用值“true”初始化,那么就不会有任何编译错误。这意味着,如果 while 循环中使用的条件变量是编译时常数,那么代码可能编译也可能不编译,这取决于上下文。未在同一行初始化的最终变量不是编译时常数。所以在这种情况下,没有问题。
程序 3:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the while
// loop with compiled time constant
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
boolean anotherFlag = false;
final boolean flag = anotherFlag;
// While loop
while (flag) {
System.out.println("Inside Loop");
}
System.out.println("Done!");
}
}
Output:
Done!
解释:在上面的代码中,不会有任何编译错误,虽然标志是一个最终变量,并且在同一行初始化,‘otherflag’不是最终变量,这就是为什么标志不是编译时常数,因此编译没有问题。
程序 4: 如果‘另一个标志’是最终变量,那么结果就会不同。下面是同样的程序来说明:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate the
// above statement
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
final boolean anotherFlag = false;
final boolean flag = anotherFlag;
while (flag) {
System.out.println("Inside Loop");
}
System.out.println("Done!");
}
}
输出
说明:在上面的代码中,标志是一个编译时常数。因此,while 循环中的代码不可访问,从而导致编译错误。
版权属于:月萌API www.moonapi.com,转载请注明出处