标签: while-loop

最佳循环成语,用于特殊外壳的最后一个元素

我在做简单的文本处理和打印语句时经常遇到这种情况,我循环一个集合,我想要特殊情况下的最后一个元素(例如,除了最后一个例子,每个普通元素都将以逗号分隔).

是否有一些最佳实践习惯或优雅的形式,不需要复制代码或在if循环中推..

例如,我有一个字符串列表,我想在逗号分隔列表中打印.(虽然解决方案已经假设列表中有2个或更多元素,否则它就像使用条件的更正确的循环一样糟糕).

例如List =("dog","cat","bat")

我想打印"[狗,猫,蝙蝠]"

我提出了两种方法

  1. 对于有条件的循环

    public static String forLoopConditional(String[] items) {
    
    String itemOutput = "[";
    
    for (int i = 0; i < items.length; i++) {
        // Check if we're not at the last element
        if (i < (items.length - 1)) {
            itemOutput += items[i] + ", ";
        } else {
            // last element
            itemOutput += items[i];
        }
    }
    itemOutput += "]";
    
    return itemOutput;
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 做循环启动循环

    public static String doWhileLoopPrime(String[] items) {
    String itemOutput = "[";
    int i …
    Run Code Online (Sandbox Code Playgroud)

java loops idioms while-loop

48
推荐指数
5
解决办法
2万
查看次数

同时批量循环

这是我想要的内容BACKUPDIR,我想要执行,cscript /nologo c:\deletefile.vbs %BACKUPDIR%直到文件夹内的文件数大于21(countfiles保留它).这是我的代码:

@echo off
SET BACKUPDIR=C:\test
for /f %%x in ('dir %BACKUPDIR% /b ^| find /v /c "::"') do set countfiles=%%x

for %countfiles% GTR 21 (
cscript /nologo c:\deletefile.vbs %BACKUPDIR%
set /a countfiles-=%countfiles%
)
Run Code Online (Sandbox Code Playgroud)

windows for-loop batch-file while-loop

46
推荐指数
4
解决办法
34万
查看次数

Bash脚本,while循环中的多个条件

我正在尝试使用bash中的一个简单的while循环使用两个条件,但在尝试了各种论坛的许多不同语法之后,我无法停止抛出错误.这是我有的:

while [ $stats -gt 300 ] -o [ $stats -eq 0 ]
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

while [[ $stats -gt 300 ] || [ $stats -eq 0 ]]
Run Code Online (Sandbox Code Playgroud)

......以及其他几个结构.我希望这个循环继续,$stats is > 300或者如果$stats = 0.

bash shell loops while-loop

46
推荐指数
1
解决办法
11万
查看次数

如何检测声音文件何时完成?

我在广播接收器活动中使用此代码播放声音文件:

notification.sound = Uri.parse("android.resource://emad.app/raw/seven_chimes");
Run Code Online (Sandbox Code Playgroud)

我想检测这个文件何时播放完毕.

我尝试了这样的循环,但我认为这对媒体播放器只有好处,因为即使我确定声音文件仍在播放,它总是=假:

/*
 * Stay here until the chime sound is finished.
 */
   while (manager.isMusicActive()){
   }
Run Code Online (Sandbox Code Playgroud)

你能告诉我应该用什么代替manager.isMusicActive()吗?

android while-loop

45
推荐指数
1
解决办法
3万
查看次数

Perl:虽然没有条件

根据doc,while只要表达式为true,语句就会执行块.我想知道为什么它变成一个带有空表达式的无限循环:

while () { # infinite loop
 ...
}
Run Code Online (Sandbox Code Playgroud)

它只是文档中的不准确吗?

perl while-loop

44
推荐指数
3
解决办法
1万
查看次数

PHP中while(true)和for(;;)之间有什么区别?

有没有之间的PHP任何差异while(true)for(;;)除了语法和可读性?

编辑:我不认为这是重复 - 我想知道PHP特有的答案.就发动机而言,有什么真正的区别吗?他们编译成同样的东西吗?他们有同等的表现吗?

编辑2:我也不会认为相对表现和相关的OpCodes是基于意见.可读性存在意见空间,但这显然不是问题.

php for-loop infinite-loop while-loop php-internals

42
推荐指数
1
解决办法
2820
查看次数

逐行迭代文本文件的内容 - 是否有最佳实践?(与PMD的AssignmentInOperand相比)

我们有一个Java应用程序,它有一些知道读取文本文件的模块.他们非常简单地使用这样的代码:

BufferedReader br = new BufferedReader(new FileReader(file));  
String line = null;  
while ((line = br.readLine()) != null)  
{  
   ... // do stuff to file here  
} 
Run Code Online (Sandbox Code Playgroud)

我在我的项目上运行PMD并在线路上获得了" AssignmentInOperand "违规while (...).

除了显而易见的事情之外,是否有更简单的方法来执行此循环:

String line = br.readLine();  
while (line != null)  
{  
   ... // do stuff to file here  
   line = br.readLine();  
} 
Run Code Online (Sandbox Code Playgroud)

这被认为是更好的做法吗?(虽然我们"复制" line = br.readLine()代码?)

java pmd while-loop

38
推荐指数
4
解决办法
8万
查看次数

如何在while循环中"读取"变量

我如何从变量中读取while read line

例如:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list
Run Code Online (Sandbox Code Playgroud)

使用上面的代码给我错误:

./copy.sh: line 25: $the_list: ambiguous redirect
Run Code Online (Sandbox Code Playgroud)

variables bash while-loop

38
推荐指数
3
解决办法
9万
查看次数

而(真); 当不在void中时,循环抛出无法访问的代码

我在java中做了一些小程序.我知道如果我写while(true);程序会在这个循环中冻结.如果代码是这样的:

测试1:

public class While {
    public static void main(String[] args) {
        System.out.println("start");
        while (true);
        System.out.println("end");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unreachable code
    at While.main(While.java:6)
Run Code Online (Sandbox Code Playgroud)

我不知道这个错误存在.但我知道它被抛出的原因.当然,第6行无法访问,导致编译问题.然后我测试了这个:

测试2:

public class While {
    public static void main(String[] args) {
        System.out.println("start");
        a();
        b();
    }
    static void a() {
        while(true);
    }
    static void b() {
        System.out.println("end");
    }
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,程序正常运行(控制台打印"开始",然后冻结).编译器无法检查内部void a()并看到它无法访问.确定我试过了:

测试3:

public class While {
    public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

c++ java compiler-construction while-loop

38
推荐指数
4
解决办法
3615
查看次数

如何在没有尾调用优化的情况下使用函数式编程替换while循环?

我正在尝试使用JavaScript中更实用的样式; 因此,我已经用for实用函数替换了for循环,例如map和reduce.但是,我没有找到while循环的功能替换,因为尾调用优化通常不适用于JavaScript.(根据我的理解,ES6可以防止尾调用溢出堆栈,但不会优化它们的性能.)

我解释了我在下面尝试过的内容,但TLDR是:如果我没有尾调用优化,那么实现while循环的功能方法是什么?

我尝试过的:

创建"while"实用程序功能:

function while(func, test, data) {
  const newData = func(data);
  if(test(newData)) {
    return newData;
  } else {
    return while(func, test, newData);
  }
}
Run Code Online (Sandbox Code Playgroud)

由于尾调用优化不可用,我可以将其重写为:

function while(func, test, data) {
  let newData = *copy the data somehow*
  while(test(newData)) {
    newData = func(newData);
  }
  return newData;
}
Run Code Online (Sandbox Code Playgroud)

但是在这一点上,感觉就像我让我的代码更复杂/混淆使用它的任何人,因为我必须使用自定义实用程序功能.我看到的唯一实际优势是它迫使我使循环变得纯净; 但似乎只是使用常规while循环并确保我保持一切纯净是更直接的.

我还试图找出一种方法来创建一个模拟递归/循环效果的生成器函数,然后使用像find或reduce这样的实用函数迭代它.但是,我还没有想出一种可读的方法.

最后,用实用函数替换for循环使得我想要完成的更明显(例如,对每个元素做一件事,检查每个元素是否通过了测试等).然而,在我看来,while循环已经表达了我想要完成的事情(例如,迭代直到我们找到素数,迭代直到答案得到充分优化,等等).

所有这一切之后,我的整体问题是:如果我需要一个while循环,我正在以函数式编程,而且我无法访问尾调用优化,那么什么是最佳策略.

javascript recursion functional-programming while-loop tail-call-optimization

38
推荐指数
2
解决办法
1万
查看次数