0

Is it possible for me to do something like the following below in order to save time from doing if else statement?

int x = 1;
int y = 2;
char z = '+';

System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3

Please advise.

Withhelds
  • 187
  • 3
  • 8
  • 16

4 Answers4

4

You can't. In your expression, the '+' char is converted to its int value. (The result of that expression would be 46: 1 + 43 + 2).

You'd have to use an if (or switch) statement:

int x = 1;
int y = 2;
char z = '+';

if (z == '+') System.out.println(x + y);
else if (z == '-') System.out.println(x - y);
// else if (z == '*') ... and so on

If you are only interested in the result, you can evaluate the String directly using Java's JavaScript ScriptEngine:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class Eval {
    public static void main(String[] args) throws Exception {
        ScriptEngineManager s = new ScriptEngineManager();
        ScriptEngine engine = s.getEngineByName("JavaScript");

        int x = 1;
        int y = 2;
        char z = '+';

        String exp = "" + x + z + y;
        System.out.println(engine.eval(exp));
    }    
}

Output:

3.0

Note: there can be some issues with the use of ScriptEngine. So do not allow the user to enter the expression to be evaluated directly. Using with variables (x, y and z like you do) takes care of this problem, though.

Community
  • 1
  • 1
acdcjunior
  • 132,397
  • 37
  • 331
  • 304
3

No, that wouldn't work as expected. (it will compile and run, but since the unicode value of + is 0x2B, or 43, and a char is treated like a number in this case, your expression x + z + y evaluates to 1 + 43 + 2, so it prints 46) You can use if/else or switch statements to evaluate what operation to do, which would work for simple inputs, or you can look at a more general expression parsing library, e.g. exp4j or jexel.

Tim S.
  • 55,448
  • 7
  • 96
  • 122
0

That will compile but not run in the way you expect.

z will be converted to an int, which will be that character's value in the default charset (most likely ASCII).

As an example, on my computer that results in "46"

Taylor
  • 3,942
  • 2
  • 20
  • 33
0

The output should be 1 + 2 + 43 = 46

For char, it will take the Ascii value of '+'

JNL
  • 4,683
  • 18
  • 29