我在做简单的文本处理和打印语句时经常遇到这种情况,我循环一个集合,我想要特殊情况下的最后一个元素(例如,除了最后一个例子,每个普通元素都将以逗号分隔).
是否有一些最佳实践习惯或优雅的形式,不需要复制代码或在if循环中推..
例如,我有一个字符串列表,我想在逗号分隔列表中打印.(虽然解决方案已经假设列表中有2个或更多元素,否则它就像使用条件的更正确的循环一样糟糕).
例如List =("dog","cat","bat")
我想打印"[狗,猫,蝙蝠]"
我提出了两种方法
对于有条件的循环
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)做循环启动循环
public static String doWhileLoopPrime(String[] items) {
String itemOutput = "[";
int i …Run Code Online (Sandbox Code Playgroud)这是我想要的内容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) 我正在尝试使用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.
我在广播接收器活动中使用此代码播放声音文件:
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()吗?
根据doc,while只要表达式为true,语句就会执行块.我想知道为什么它变成一个带有空表达式的无限循环:
while () { # infinite loop
...
}
Run Code Online (Sandbox Code Playgroud)
它只是文档中的不准确吗?
有没有之间的PHP任何差异while(true)和for(;;)除了语法和可读性?
编辑:我不认为这是重复 - 我想知道PHP特有的答案.就发动机而言,有什么真正的区别吗?他们编译成同样的东西吗?他们有同等的表现吗?
编辑2:我也不会认为相对表现和相关的OpCodes是基于意见.可读性存在意见空间,但这显然不是问题.
我们有一个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()代码?)
我如何从变量中读取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) 我在java中做了一些小程序.我知道如果我写while(true);程序会在这个循环中冻结.如果代码是这样的:
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行无法访问,导致编译问题.然后我测试了这个:
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()并看到它无法访问.确定我试过了:
public class While {
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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