Loops 所有while循环是否可转换为for循环?
早些时候,我认为在使用链表时不能使用for循环。。。但是Loops 所有while循环是否可转换为for循环?,loops,linked-list,navigation,Loops,Linked List,Navigation,早些时候,我认为在使用链表时不能使用for循环。。。但是 for(current=head;current!=NULL;current=current->next) 这句话让我思考。all while循环是否可转换为for循环,特别是当存在多个条件时?在本例中,您可以使用for循环,因为您要迭代特定次数(列表中的每个项目一次)。这不是超直观的,但最纯粹的编程相关,您可以设法从纯真/假运行条件更改为有界可数运行条件 如果涉及任何数量的硬件,这种思路很快就会崩溃。假设你有一个程序,只要你按下一个按钮
for(current=head;current!=NULL;current=current->next)
这句话让我思考。all while循环是否可转换为for循环,特别是当存在多个条件时?在本例中,您可以使用for循环,因为您要迭代特定次数(列表中的每个项目一次)。这不是超直观的,但最纯粹的编程相关,您可以设法从纯真/假运行条件更改为有界可数运行条件 如果涉及任何数量的硬件,这种思路很快就会崩溃。假设你有一个程序,只要你按下一个按钮,它就会打开一个LED
while(按钮按下)
{
发光二极管=开启;
}
像这样的事情,你不想使用for循环,因为当你停下来的时候,没有办法计数,时间是由按下按钮的人决定的,直到它真正发生,计算机才知道
TL;DR:你可以用for循环来处理很多不直观的事情。但是您不能使用它们来替换所有可能的while循环。我的代码中的一些代码示例,使用
while
,我不会用for
替换它
public function generateUniqueTokenForEntity(){
while (true) {
$token = substr(md5(uniqid()), 0, 10);
$entry = $databaseTable->findEntryByToken($token);
if ($entry === null) {
return $token;
}
}
}
是的,可以在while循环中写入的任何内容都可以用for循环表示。它们都是入口控制循环,这意味着它们首先检查条件,然后执行主体 要使循环正常运行,我们至少需要一件事,即条件,最多需要3件事:
1. Initialization of the looping variable (If necessary)
2. Condition (Necessary)
3. Modification to the looping variable (If looping variable is initialized)
现在,我将提供一个包含while和for循环的简单代码块:
->打印从1到100的所有自然数。
使用While循环
inti=1//循环变量的初始化
虽然(以上内容可以简单地用if语句替换。不,不能。代码块的实际上下文将在一个中断中,当你按下一个按钮时会触发该中断,然后当按钮保持不动时,你会打开led,直接在这个代码块外,你会关闭led。假设该示例是lame和super sp具体来说,但这是准确回答问题的方法——所有的while循环都可以替换为for循环——如果你想打开led并让它保持打开状态,if就足够了。但是如果你想在按钮按下时打开它,否则你会使用while循环。for(;;)==while(true)。虽然(true)实际上没有任何检查条件,但它将永远运行,因为true始终为true。只需将所有说明符留空,即可实现for循环的相同“永远运行”行为。
int i=1; //Initialization of looping variable
while(i<=100) //Condition check
{
cout<<i;
i++; //Increament (Modification of looping variable)
}
for(int i=1;i<=100;i++)
//Here the first part to the for is initialization of looping variable.
// Second part is the Condition
// Third part is the increament
{
cout<<i;
}
int i=1;//Initializing the loop variable
for(;i<=100;)//Condition
{
cout<<i;
i++;//Increament
}