将用户输入的比较运算符直接引入if语句(java)
很抱歉,如果这是一个简单的问题,我对编码还不熟悉,在网上找不到答案/找不到正确的表达方式 因此,我为比较运算符(=,!=,=)接收用户输入,然后使用它计算输出 是否可以将用户输入直接放入if语句的比较运算符中 aka input USERINPUTPORMATION和if语句是否有效将用户输入的比较运算符直接引入if语句(java),java,compare,comparison,Java,Compare,Comparison,很抱歉,如果这是一个简单的问题,我对编码还不熟悉,在网上找不到答案/找不到正确的表达方式 因此,我为比较运算符(=,!=,=)接收用户输入,然后使用它计算输出 是否可以将用户输入直接放入if语句的比较运算符中 aka input USERINPUTPORMATION和if语句是否有效 if(number1 userInputComparison number2) { } 还有别的办法吗 例如,我的代码在下面的简化版本中是否可以删除冗余 BufferedReader reader = new
if(number1 userInputComparison number2) {
}
还有别的办法吗
例如,我的代码在下面的简化版本中是否可以删除冗余
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String userInput = reader.readLine(); //Should be > or <
int userInputNumber = Integer.parseInt(reader.readLine());
System.out.println("RESULTS");
int[] numbers = {5, 15, 12, 7, 0};
if (userInput.equals(">")) {
for(int i = 0; i < numbers.length; i++) {
if(numbers[i] > userInputNumber) {
System.out.println(numbers[i]);
}
}
} else if (userInput.equals("<")) {
for(int i = 0; i < numbers.length; i++) {
if(numbers[i] < userInputNumber) {
System.out.println(numbers[i]);
}
}
} else {
System.out.println("please enter > or <");
}
BufferedReader reader=新的BufferedReader(新的InputStreamReader(System.in));
字符串userInput=reader.readLine()//应该是>或<
int userInputNumber=Integer.parseInt(reader.readLine());
系统输出打印项次(“结果”);
int[]数字={5,15,12,7,0};
if(userInput.equals(“>”){
for(int i=0;iuserInputNumber){
System.out.println(数字[i]);
}
}
}如果(userInput.equals(“或是”),您可以使用java中的ScriptEngineManager。下面是一个示例代码,向您展示如何使用它:
public static void main(String[] args) throws ScriptException {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension("js");
Bindings bindings = scriptEngine.createBindings();
Scanner reader = new Scanner(System.in);
System.out.println("Please enter operator:");
String userInput = reader.next();
System.out.println("Please enter number:");
int userInputNumber = reader.nextInt();
int[] numbers = {5, 15, 12, 7, 0};
String expression = "a" + userInput + "b";
bindings.put("b", userInputNumber);
for (int i = 0; i < numbers.length; i++) {
bindings.put("a", numbers[i]);
if ((Boolean) scriptEngine.eval(expression, bindings)) {
System.out.println(numbers[i]);
}
}
}
publicstaticvoidmain(字符串[]args)引发脚本异常{
ScriptEngineManager ScriptEngineManager=新ScriptEngineManager();
ScriptEngine ScriptEngine=scriptEngineManager.GetEngineeByExtension(“js”);
Bindings Bindings=scriptEngine.createBindings();
扫描仪阅读器=新扫描仪(System.in);
System.out.println(“请输入运算符:”);
字符串userInput=reader.next();
System.out.println(“请输入号码:”);
int userInputNumber=reader.nextInt();
int[]数字={5,15,12,7,0};
字符串表达式=“a”+userInput+“b”;
bindings.put(“b”,userInputNumber);
for(int i=0;i
对于系统控制台交互,我更喜欢使用Scanner
而不是BufferedReader
。对于应该在何处使用它们,有一些很好的解释。直接将用户输入注入源代码并让其运行是非常糟糕的。这意味着用户现在可以在您的计算机上运行任何代码,这是一个很长的时间尿毒症风险
相反,您应该保留您的if
语句,以便只保留
、=
和false;
if(userInput.equals(“>”){
运算符=(x,y)->x>y;
}else if(userInput.equals)(“或者只是一件小事:双函数需要3个参数(前2个用于x,y,一个用于result)和操作符。apply(x,y)
。如果您想使用操作符。test()
我假设正确的接口应该是BiPredicate
是否应该是BiFunction
或BiPredicate
?
BiPredicate<Integer, Integer> operator = (x, y) -> false;
if (userInput.equals(">")) {
operator = (x, y) -> x > y;
} else if (userInput.equals("<")) {
operator = (x, y) -> x < y;
} else if
...
} else {
System.out.println("please enter > or <");
}
for(int i = 0; i < numbers.length; i++) {
if(operator.test(numbers[i], userInputNumber)) {
System.out.println(numbers[i]);
}
}