Scanner sal = new Scanner(System.in);
System.out.print("Enter first_salary: ");
int Salary1 = sal.nextInt();
System.out.print("Enter second_salary : ");
int Salary2 = sal.nextInt();
System.out.print("Combined Salary is " Salary1 Salary2);
I am trying to get user input twice, and then print the sum. Instead, the output is concatenating the numbers instead of actually adding them.
CodePudding user response:
Because the operator associates left to right. Your argument is equivalent to the explicit
(("Combined Salary is " Salary1) Salary2)
Since ("Combined Salary is " Salary1) results in a string, you will concatenate strings. To group differently, adjust the order of operations with parentheses:
System.out.print("Combined Salary is " (Salary1 Salary2));
CodePudding user response:
Like the other answer says, goes from left to right. It is a "good idea" to always use parentheses that explicitly show the desired order of operations, especially when mixing types.
Doing so can reduce hard to find errors.
For example if you want to print the sum of two integers, you would use:
System.out.println(num1 num2);
If I wanted to add a useful string to the output I would add "Sum of num1 and num2 :" and then keep the sum in parentheses, giving:
System.out.println("Sum of num1 and num2:" (num1 num2));
CodePudding user response:
As to why this happens, @MadPhysicist's answer covers that.
As to how to avoid this you can either use parentheses as they said or you can use string formatting, like this:
System.out.println("Combined Salary is %d".formatted(Salary1 Salary2));
String has had the formatted method since Java 15. If you're stuck with an older version you can use the static format method instead:
System.out.println(String.format("Combined Salary is %d", Salary1 Salary2));
