Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:使用创建的字符串作为循环参数?_Java_Loops_Parameters - Fatal编程技术网

Java:使用创建的字符串作为循环参数?

Java:使用创建的字符串作为循环参数?,java,loops,parameters,Java,Loops,Parameters,简而言之,用户将输入一个数字(比如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

简而言之,用户将输入一个数字(比如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
}
开关(输入){
案例1:
searchTerm=“i5”;
案例2:

searchTerm=“i>=10&&i19&&i正确的方法是根本不使用字符串:

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) {
    // ...
}
int最小值,最大值;
开关(输入){
案例1://i5
最小=6;
最大值=10;
中断;//以避免继续进行下一个案例
案例2://i>=10&&i19&&i您可以使用JavaScript的
.eval()

另外,不要忘记在每个
案例结尾处的
break;

看看这个

下面是片段

功能测试(输入,i){
开关(输入){//input=1
案例1:
searchTerm=“i5”//这将是“searchTerm”
打破
案例2:
searchTerm=“i>=10&&i19&&i在Java 8中,可以选择lambda而不是
字符串

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)) {
  ...
}
谓词searchTerm=(整数v)->false;
开关(输入){
案例1:
searchTerm=(整数v)->v<10&&v>5;
打破
案例2:
searchTerm=(整数v)->v>=10&&v<19;
打破
案例3:
searchTerm=(整数v)->v>19&&v<24;
打破
}
while(searchTerm.test(i)){
...
}

您可以创建如下枚举

public enum SearchTerms {

    None(""),
    Between6And9("i<10 && i>5"),
    Between10And18("i>=10 && i<19"),
    Between20And23("i>19 && i<24");

    private final String stringValue;

    SearchTerms(String stringValue) {
        this.stringValue = stringValue;
    }

    public String getStringValue() {
        return stringValue;
    }

    public static SearchTerms fromStringValue(String stringValue) {
        for (SearchTerms searchTerm : values()) {
            if (searchTerm.getStringValue().equalsIgnoreCase(stringValue)) {
                return searchTerm;
            }
        }
        return SearchTerms.None;
    }

}
公共枚举搜索术语{
无(“”),
在6和9之间(“i5”),

在10和18之间(“i>=10&&i19&&IW为什么要为此使用字符串?使用数字变量!不,这是不可能的,也不是必需的,维护和调试非常困难。您在字符串中定义了一个表达式,必须编译才能使用。您可以使用i=6;eval(searchTerm=“i5”;)在里面loop@raghavendra:Java!=JavaScript@T.J.Crowder谢谢,对不起,我也错过了tag@Bathsheba:谢谢,是的,我本想把它挂起来然后忘了。:-)我没有使用正确的例子,但你的回答肯定回答了所问的问题。新问题呢?@Jimpy:我在回答中添加了新的问题。非常感谢你的帮助!你的回答非常全面,给了我很多不同的角度来处理这个问题。看起来我有一个全新的任务需要解决。再次感谢。可以使用,但不是一个好的使用。推荐答案他可以,是的,如果a)这是JavaScript而不是Java(它们是完全不同的语言和环境),和B)他想完全不必要地使用一个完整的JavaScript解析器,其中只需要简单的变量voting@raghavendra:错误的语言是有用的,确切地说是怎样的?我们是否也发布Fortran和Pascal答案?也许是一些汇编代码?对不起,伙计们。我的错误。我没有看到
标记ode>。刚刚看到代码。我认为它是javascript。我将删除此答案。遗憾的是,由于编辑,此答案不再回答问题。
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)) {
  ...
}
public enum SearchTerms {

    None(""),
    Between6And9("i<10 && i>5"),
    Between10And18("i>=10 && i<19"),
    Between20And23("i>19 && i<24");

    private final String stringValue;

    SearchTerms(String stringValue) {
        this.stringValue = stringValue;
    }

    public String getStringValue() {
        return stringValue;
    }

    public static SearchTerms fromStringValue(String stringValue) {
        for (SearchTerms searchTerm : values()) {
            if (searchTerm.getStringValue().equalsIgnoreCase(stringValue)) {
                return searchTerm;
            }
        }
        return SearchTerms.None;
    }

}
SearchTerms searchTerm = SearchTerms.fromStringValue("i<10 && i>5");

switch(searchTerm) {
    case Between6And9:
        //dosomething
        break;
}