将用户输入的比较运算符直接带入 if 语句 (java)
Taking a user imputed comparison operator directly into if statement (java)
抱歉,如果这是一个简单的问题,我是编码新手,无法在任何地方找到答案online/couldn找不到正确的措辞方式。
所以我正在为比较运算符(==、!=、<、<=、>、>=)接收用户输入,然后使用它来计算输出。
是否可以将用户输入直接放入 if 语句的比较运算符中?
也就是输入 userInputComparison 并使 if 语句起作用?
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 <");
}
是的,您可以使用 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]);
}
}
}
我更喜欢使用 Scanner
而不是 BufferedReader
进行系统控制台交互。 Here 是一些关于您应该在何处使用它们的很好的解释。
直接将用户输入的片段注入您的源代码并拥有它 运行 非常糟糕。这意味着用户现在可以 运行 您计算机上的任何代码,这是一个很大的安全风险。
相反,您应该保留 if
语句,因此只允许 >
、<
、>=
和 <=
。但是里面的for循环,可以提取出来,所以你的重复代码更少。
您可以通过将运算符存储在 BiPredicate<Integer, Integer>
:
中来实现
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]);
}
}
抱歉,如果这是一个简单的问题,我是编码新手,无法在任何地方找到答案online/couldn找不到正确的措辞方式。
所以我正在为比较运算符(==、!=、<、<=、>、>=)接收用户输入,然后使用它来计算输出。
是否可以将用户输入直接放入 if 语句的比较运算符中?
也就是输入 userInputComparison 并使 if 语句起作用?
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 <");
}
是的,您可以使用 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]);
}
}
}
我更喜欢使用 Scanner
而不是 BufferedReader
进行系统控制台交互。 Here 是一些关于您应该在何处使用它们的很好的解释。
直接将用户输入的片段注入您的源代码并拥有它 运行 非常糟糕。这意味着用户现在可以 运行 您计算机上的任何代码,这是一个很大的安全风险。
相反,您应该保留 if
语句,因此只允许 >
、<
、>=
和 <=
。但是里面的for循环,可以提取出来,所以你的重复代码更少。
您可以通过将运算符存储在 BiPredicate<Integer, Integer>
:
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]);
}
}