Jim*_*mpy 2 java parameters loops
简而言之,用户将输入一个数字(比如1到3).这将决定循环应该搜索的数字范围.
switch(input){
case 1:
searchTerm = "i<10 && i>5";
case 2:
searchTerm = "i>=10 && i<19";
case 3:
searchTerm = "i>19 && i<24";
}
while(searchTerm){
//some function
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?我无法找到使用字符串作为搜索参数的方法.
编辑:我认为我没有很好地解释为什么我需要这个.如果有不同数量的参数,该怎么办?例如:
case 1:
searchTerm = "i<5"
case 2:
searchTerm = "i>25 && i<29"
case 3:
searchTerm = "(i<50 && i>25) && (i>55 && i<75)"
case 4:
searchTerm = "(i<20 && i>15) && (i>300 && i<325) && (i>360 && i<380)
Run Code Online (Sandbox Code Playgroud)
那怎么做呢?多个循环调用相同的函数?
执行此操作的正确方法是根本不使用字符串:
int min, max;
switch(input){
case 1: // i<10 && i>5
min = 6;
max = 10;
break; // to avoid follow-through to the next case
case 2: // i>=10 && i<19
min = 10;
max = 20;
break;
case 3: // i>19 && i<24
min = 20;
max = 25;
break;
default:
// You need something here in case the value entered wasn't 1-3
}
for (int i = min; i < max; ++i) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
重新编辑:
我认为我没有很好地解释为什么我需要这个.如果有不同数量的参数,该怎么办?
在这种情况下,您将不得不使用表达式求值程序(或写一个,这是一个非平凡的任务).例如,春天有一个(不推荐,只是碰巧听到它).搜索"Java表达式评估程序"应该会出现一些选项.
另一个替代方案,虽然有些人把你的问题误认为是Java 脚本问题,但有点有趣,就是使用Java内置的JavaScript评估器(Rhino或Nashorn).例如:实例
import javax.script.*;
class Ideone {
public static void main(String[] args) throws java.lang.Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String searchTerm = "i >= 19 && i <= 24";
int i;
try {
i = 19;
engine.put("i", i);
while ((boolean)engine.eval(searchTerm)) {
System.out.println("i = " + i);
++i;
engine.put("i", i);
}
System.out.println("Done");
} catch (ScriptException scriptException) {
System.out.println("Failed with script error");
}
}
}
Run Code Online (Sandbox Code Playgroud)
...但是你仍然有确定要使用的初始值的问题i,我已经在上面硬编码了.
在Java 8中,您可以选择lambda而不是String:
Predicate<Integer> searchTerm = (Integer v) -> false;
switch (input) {
case 1:
searchTerm = (Integer v) -> v < 10 && v > 5;
break;
case 2:
searchTerm = (Integer v) -> v >= 10 && v < 19;
break;
case 3:
searchTerm = (Integer v) -> v > 19 && v < 24;
break;
}
while (searchTerm.test(i)) {
...
}
Run Code Online (Sandbox Code Playgroud)