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);Estoy tratando de obtener la entrada del usuario dos veces y luego imprimir la suma. En cambio, la salida está concatenando los números en lugar de agregarlos.
Porque el operador + se asocia de izquierda a derecha. Tu argumento es equivalente al explícito.
(("Combined Salary is " + Salary1) + Salary2) Dado que ("Combined Salary is " + Salary1) da como resultado una cadena, concatenará cadenas. Para agrupar de manera diferente, ajusta el orden de las operaciones entre paréntesis:
System.out.print("Combined Salary is " + (Salary1 + Salary2));Como dice la otra respuesta, + va de izquierda a derecha. Es una "buena idea" usar siempre paréntesis que muestren explícitamente el orden deseado de las operaciones , especialmente cuando se mezclan tipos.
Si lo hace, puede reducir los errores difíciles de encontrar.
Por ejemplo, si desea imprimir la suma de dos números enteros, usaría:
System.out.println(num1 + num2); Si quisiera agregar una cadena útil a la salida, agregaría "Sum of num1 and num2 :" y luego mantendría la suma entre paréntesis, dando:
System.out.println("Sum of num1 and num2:" + (num1 + num2));En cuanto a por qué sucede esto, la respuesta de @MadPhysicist cubre eso.
En cuanto a cómo evitar esto, puede usar paréntesis como dijeron o puede usar formato de cadena, como este:
System.out.println("Combined Salary is %d".formatted(Salary1 + Salary2)); String ha tenido el método formatted desde Java 15. Si tiene una versión anterior, puede usar el método de format estático en su lugar:
System.out.println(String.format("Combined Salary is %d", Salary1 + Salary2));