这是一个简单的代码,当一个数字被提升到另一个数字时给出输出。但是它总是返回数字的平方而不是循环。 请帮帮我们
public File[] finder(String dirName) {
File dir = new File(dirName);
return dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
return filename.endsWith(".txt");
}
});
}
答案 0 :(得分:2)
您允许循环最多进行1次迭代。这是因为return
退出当前proc
(自动循环)。
修复该部分会给出:
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
}
return $ans
}
但是......这并没有给你答案,是吗?你的代码逻辑不太正确。我认为应该是:
proc raise {base pow} {
for {set base1 $base} {$pow > 1} {incr pow -1} {
set ans [expr {$base * $base1}]
set base $ans
}
return $ans
}
incr
采用变量名称,而不是变量,并且您希望迭代直到功率高于1
。如果它是1,那么你得到基数,因此你不循环。最后一次更改是brace the expressions。要使上述功能也适用于0
,您可以使用Peter's proc
。
但是所有这些都说明了,为什么不使用内置运算符呢?
set ans [expr {$base**$pow}]
甚至:
set ans [expr {pow($base,$pow)}]
答案 1 :(得分:2)
稍微不那么凌乱的解决方案,它也为$pow
= 0提供了正确答案:
proc raise {base pow} {
for {set answer 1} {$pow > 0} {incr pow -1} {
set answer [expr {$answer * $base}]
}
return $answer
}
在使用代码进行实验时,通常会对变量和命令调用感到吝啬:当您确定无法消除它们时,您可能拥有相当高效,可读且健壮的代码。 / p>
答案 2 :(得分:1)
只是一目了然的答案:你过早地return
不是吗?
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
}
return $ans
}