Java 中 while 和 do-while 代码之间的区别

Difference between while and a do-while code in Java

提问人:james51 提问时间:6/7/2023 最后编辑:Federico klez Cullocajames51 更新时间:8/11/2023 访问量:153

问:

我现在正在学习java,我看了视频,我还是不明白,甚至chatgpt解释它我仍然不明白,有人可以给我一个简短的简单解释和while的例子以及do-while语句吗?

我尝试了这个代码块:

import java.util.Scanner;

public class learn {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name = "";
        
        while(name.isBlank()) {
            System.out.println("your name pls : ");
            name = scanner.nextLine();
            
        }
        
        System.out.println("Hello "+name);
        
        
        
    }
        
}
    

这在代码块时做:

import java.util.Scanner;

public class learn {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name = "";
        
    do {
            System.out.println("your name pls : ");
            name = scanner.nextLine();
            
        }   while(name.isBlank());
        
        System.out.println("Hello "+name);
        
        
        
    }
        
}
    

但我仍然不明白其中的区别

java 循环 while-loop do-while

评论

2赞 6/7/2023
Java 教程 - while 和 do-while 语句 : “do-while 和 while 之间的区别在于 do-while 在循环的底部而不是顶部计算其表达式。因此,do 块中的语句始终至少执行一次,如以下 DoWhileDemo 程序所示:”
0赞 6/7/2023
你不明白吗?
0赞 james51 6/7/2023
我不明白什么是困难,它执行的相同
0赞 Iłya Bursov 6/7/2023
首先检查条件,然后执行正文,首先执行正文,其次检查条件while-dodo-while
1赞 6/7/2023
它在您选择的这个非常具体的示例中执行相同的操作。这里非常清楚地解释了差异。do-while 将始终至少执行一次它的块。while 循环也可以选择根本不执行它的块。

答:

0赞 Jonathan S. Fisher 6/7/2023 #1

这取决于您要解决的问题。

如果需要在成为循环之前先初始化条件,则可以使用 .如果条件已初始化,则可以使用 。while { ... }do { ... } while

我喜欢把它想象成“顶部测试循环”和“底部测试循环”,其中“测试”的意思是“我退出循环吗?

另一个重要的区别是底部测试循环始终至少运行一次。因此,如果需要在循环中至少运行一次代码,则可以使用 do-while。

编辑

@h0r53想要一个 while 循环初始化条件的示例。所以这里有两个例子:

评论

0赞 h0r53 6/7/2023
我不认为这种差异与初始化条件有太大关系。它更多的是保证一个例程至少执行一次,尽管有条件,而不是有条件地循环。
0赞 Jonathan S. Fisher 6/8/2023
@h0r53这是不正确的。我添加了示例。
0赞 h0r53 6/8/2023
我不是反对者 - 我只是说 while 循环和 do-while 循环之间的主要区别在于循环条件是在 do-while 循环结束时计算的,而在 while 循环的开头计算。您可能有涉及初始化的循环的有效示例,但这是一个特定情况,而不是两个构造之间的一般差异。
0赞 h0r53 6/8/2023
再说一次,我不是反对票。不确定是不是你,但去我过去提供的随机答案和反对票似乎很微不足道。但是,由于您提供了示例以试图解决我的担忧,并且这些示例在这里似乎相关,因此我将为提供深思熟虑的答案投赞成票。
2赞 MUsmanTahir 6/7/2023 #2

在 While 循环中,在启动循环块之前,它会检查提供的条件是否满足 (true)。举个例子,

while(false){
 System.out.println("While");
}

另一方面,在 do while 中,该块将在检查 while 中的条件之前执行一次。以这个为例,

do{
 System.out.println("Do While");
}while(false);

其中 while 循环不会打印任何内容,但 do while 会在检查条件和终止之前打印一次......Do While

我希望它能帮助你理解......

0赞 Idle_Mind 6/7/2023 #3

这里有一个例子,希望能非常清楚地说明循环和循环之间的区别。do...whilewhile

在下面的代码中,该函数将返回 true 或 false(在这个简单示例中始终返回 true)以指示它是否“安全跳转”。如果跳跃不安全,那么如果你仍然这样做,你就会死。考虑到这一点,如果您在检查这样做是否安全之前,那么您就是在用自己的生命赌博。另一方面,如果你在跳跃前检查以确保它是安全的,那么你就可以保证生存下来:safeToJump()jump()

public static void main(String[] args) {
    do {
        jump();
    } while (safeToJump());

    while (safeToJump()) {
        jump();
    }
}

public static boolean safeToJump() {
    return true;
}

public static void jump() {   
    System.out.println("Jump!");
}

在 中,在第一个循环中,我们在检查部分中的条件语句之前运行循环的主体,因此我们可能在条件不安全的情况下跳转。这可能是可能导致死亡的危险行为。因此,做一个...while 循环在检查条件语句之前将始终至少运行一次。main()do...whilewhile

在第二个循环中,条件语句在正文之前进行检查,因此只有在返回并且条件实际上可以安全跳转时才会执行命令。考虑到这一点,如果返回了 ,那么循环的主体根本不会运行。因此,while 循环将运行零次或多次whilejump()truesafeToJump()false

看到区别了吗?如果希望循环的主体在条件检查之前运行,请使用循环。相反,如果您希望循环的主体在条件检查后运行,请使用循环。do...whilewhile

-1赞 Reilas 6/8/2023 #4

如果要在循环的条件语句中分配值,则可能需要先执行代码块。

以下是 C 编程语言(有时称为 K&R)的例外。
我之所以使用这个例子,是因为 JavaC 继承了它的大部分组件。

这是来自 3.6 Loops–Do-while

“经验表明,do-while的使用率比whilefor少得多。尽管如此,它有时还是很有价值的,例如以下函数 itoa,它将数字转换为字符串(atoi 的反函数)。这项工作比最初想象的要简单一些,因为生成数字的简单方法以错误的顺序生成它们。我们选择向后生成字符串,然后反转它。

/* itoa:  convert n to characters in s */
void itoa(int n, char s[])
{
    int i, sign;

    if ((sign = n) < 0)  /* record sign */
        n = -n;          /* make n positive */
    i = 0;
    do {       /* generate digits in reserve order */
        s[i++] = n % 10 + '0';   /* get next digit */
    } while ((n /= 10) > 0);     /* delete it */
    if (sign < 0)
        s[i++] = '-';
    s[i] = '\0';
    reverse(s);
}

此外,Java 还通过以下内容解释了其中的区别。

“do-while 和 while 之间的区别在于,do-while 在循环的底部而不是顶部评估其表达式。因此,do 块中的语句始终至少执行一次......”

while 和 do-while 语句(™学习 Java 语言> Java 教程>语言基础知识)。

0赞 Navindu Dahanayake 6/8/2023 #5

While loop 在执行循环体之前检查条件,

while(condition){
   //block of statements to be executed repeatedly
}

Do-while 循环在执行循环体后检查条件,

do{
   //block of statements to be executed repeatedly
}while(condition)

在 while 循环中,仅当条件为 true 时才会执行语句块。

while(false){
   System.out.println("Hello World");
}

output:

但是,在 do-while 循环中,循环内的语句块将至少执行一次,即使条件为 false。

do{
   System.out.println("Hello World");
}while(false)

output: Hello world
0赞 Yigit Emre TURKKAN 8/11/2023 #6

只有在使用 while 时,才会根据条件开始操作。但是当我们使用 Do-While 结构时,它首先执行一次操作,然后根据条件继续。

评论

1赞 Abra 8/15/2023
请原谅我,但我不明白你的回答如何添加其他 [五个] 答案中尚未说明的任何内容。如果你只是[基本上]重复另一个答案,我认为最好根本不回答。