如何在BeanShell的while循环中迭代判断输入变量是否存在?
解决动态数量input变量的循环迭代问题
你的核心需求是遍历input0、input1...这类数量不固定的变量,直到变量不存在时退出循环。当前遇到的问题是input(int q)方法里的f.equals(field)判断无法匹配,导致方法直接返回null,循环无法正常执行。
问题排查与修正步骤
先确认变量名的实际格式
首先要搞清楚global.variables里存储的变量名到底是什么样的——可能和你拼接的"input"+q存在格式差异:- 大小写不一致(比如实际是
Input0而非input0) - 变量名前后有空格(比如
" input2 ") - 有额外的前缀/后缀(比如
"prefix_input0")
可以先在
input方法里加调试打印,输出所有变量名和目标变量名,快速定位差异:String input(int q) { String field = "input" + q; // 调试打印,确认变量名格式 System.out.println("目标变量名: " + field); System.out.println("所有全局变量: " + Arrays.toString(global.variables)); for (String f : global.variables) { // 根据实际情况调整匹配逻辑,比如先去空格、忽略大小写 String cleanedF = f.trim(); if (cleanedF.equalsIgnoreCase(field)) { return (String) this.namespace.getVariable(cleanedF); } } return null; }- 大小写不一致(比如实际是
优化循环逻辑(可选)
原有的循环写法需要重复初始化inputV,可以改成do-while结构,让代码更简洁:int q = 0; String inputV; do { inputV = input(q); if (inputV != null) { System.out.println(q + " " + inputV); System.out.println("输入参数不为空"); System.out.println("输入值为: " + inputV); // 这里执行你的业务代码 } q++; } while (inputV != null);额外注意事项
- 如果变量名是严格的
input0、input1格式,去掉equalsIgnoreCase,用严格的equals匹配即可 - 确认
this.namespace.getVariable(...)能正确返回变量值,避免变量存在但取值为null的情况干扰循环判断
- 如果变量名是严格的
内容的提问来源于stack exchange,提问作者Ty0914
相关产品推荐
相关产品推荐

