1

Tengo el siguiente código

package Condicionales;
import java.util.Scanner;

public class PruebaJava {  
    public static void main(String[] args) {
        /*float numero1;
        float numero2;
        float total;
        */Scanner lector = new Scanner(System.in);/*
        System.out.println("Ingrese un valor numerico");
        System.out.println("RECUERDA QUE PARA USAR DECIMALES USA ','");
        numero1 = lector.nextFloat();

        System.out.println("Ingrese un valor numerico X2");
        numero2 = lector.nextFloat();*/

        System.out.println("Escoja el tipo de operacion a realizar");
        System.out.println("1. Suma");
        System.out.println("2. Resta");
        System.out.println("3. Multiplicacion");
        System.out.println("4. Division");

        System.out.println("Escriba el numero o tipo de operacion");
        String tipoOperacion = lector.next();

        if (tipoOperacion == "Suma" || tipoOperacion == "suma") {
            System.out.println("Suma!!");
        }

        System.out.println("... " + tipoOperacion);
    }
}

En la parte del if si ingreso "Suma" no se cumple la condición, pensé que posiblemente en la variable tipoOperacion se estaba guardando otra cosa, pero no, es exactamente "Suma" y el if no devuelve true

Tener en cuenta que si agrego el valor a la variable desde el código, funciona correctamente, pero cuando se deja que el usuario ingrese el valor, el if no devuelve true.

Máxima Alekz
  • 1,785
  • 5
  • 23
  • 50
  • 2
    Es mejor usar `equals`: `if ( tipoOperacion.equals("Suma") || tipoOperacion.equals("suma") ) { ...` – A. Cedano Mar 07 '17 at 06:15
  • 1
    La pregunta es más bien candidata para ser cerrada, porque, de acuerdo a las normas de esSO: _Parece ser un problema que no se puede reproducir o un **error tipográfico**._ – A. Cedano Mar 07 '17 at 06:24
  • @Máxima: Los lineamientos del sitio indican que no se deben forzar las etiquetas en el título. Véase [¿Qué son las etiquetas y cómo debo usarlas?](http://es.stackoverflow.com/help/tagging) – Rubén Mar 07 '17 at 06:52
  • 1
    @A.Cedano: ¿por qué consideras que el usar `==` en lugar de `.equals()` es un error tipográfico? ¿por qué no se puede usar `==` en Java? – Rubén Mar 07 '17 at 06:56
  • Respecto a los lineamientos, para mí el título que se proporcione debe proporcionar rápidamente el lenguaje que se esté trabajando para evitar perdida de tiempo a los que vayan a responder, y respecto al supuesto error tipográfico, no lo veo por ninguna parte. – Máxima Alekz Mar 07 '17 at 06:59
  • Y según los lineamientos habla de que **No debería** en sentido opcional para el usuario que esté preguntando :) – Máxima Alekz Mar 07 '17 at 07:01
  • @Rubén Lo considero error tipográfico. Pero pensándolo, puede serlo o no. Sucede que el usuario se ha equivocado en la forma de evaluar la igualdad de cadenas ya que en Java el `==` funciona para los tipos primitivos (`int`, `char` ...) pero **no para las cadenas** en cuyo caso ha de usarse `equals` Entonces es verdad, el usuario cometió un error mayor :) yo lo descubrí, pero los puntos son para @x-rw :) En resumen, para mi la pregunta es candidata para cierre, porque lo interesante del caso se trata aquí: http://es.stackoverflow.com/questions/225/cómo-comparar-correctamente-strings-en-java – A. Cedano Mar 07 '17 at 13:15
  • @A.Cedano Según entiendo error tipográfico se refiere a otro tipo de error, no al que mencionas. Habría que discutir esto en el chat o en meta pues este hilo se ha "cerrado" por otro motivo (es un duplicado) :) – Rubén Mar 07 '17 at 15:23

2 Answers2

2

prueba con nextLine() y para comparar cadenas se usa .equals()

solucionando tu caso:

String tipoOperacion = lector.nextLine();

eso es para cuando se ingresa una sola palabra en la linea. pero que pasa si ingresa varias, por ejemplo "suma de dos", en ese caso debes convertir en array de con la funcion split

String [] palabras=tipoOperacion.split(" ");

tipoOperacion=palabras[0];

faltaba declarar la variable tipoOperacion, debes condicionar si el lector tiene un elemento con .hasNext()

import java.util.Scanner;

public class PruebaJava {  
    public static void main(String[] args) {
        /*float numero1;
        float numero2;
        float total;
        */Scanner lector = new Scanner(System.in);/*
        System.out.println("Ingrese un valor numerico");
        System.out.println("RECUERDA QUE PARA USAR DECIMALES USA ','");
        numero1 = lector.nextFloat();

        System.out.println("Ingrese un valor numerico X2");
        numero2 = lector.nextFloat();*/

        System.out.println("Escoja el tipo de operacion a realizar");
        System.out.println("1. Suma");
        System.out.println("2. Resta");
        System.out.println("3. Multiplicacion");
        System.out.println("4. Division");
        String tipoOperacion="";
        System.out.println("Escriba el numero o tipo de operacion");

      while (lector.hasNext())
      {
         tipoOperacion=lector.nextLine();
      }

        if (tipoOperacion.equals("Suma") || tipoOperacion.equals("suma")) {
            System.out.println("Suma!!");
        }

        System.out.println("... " + tipoOperacion);
    }
}

no use mucho scanner, te muestro una alternativa BufferedReader

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class PruebaJava {  
    public static void main(String[] args) throws Throwable {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        String tipoOperacion="";

        System.out.println("Escoja el tipo de operacion a realizar");
        System.out.println("1. Suma");
        System.out.println("2. Resta");
        System.out.println("3. Multiplicacion");
        System.out.println("4. Division");

        System.out.println("Escriba el numero o tipo de operacion");
        if((line = in.readLine()) != null) {
            tipoOperacion=line;
        }

        if (tipoOperacion.equals("Suma")|| tipoOperacion.equals("suma")) {
            System.out.println("Suma!!");
        }

        System.out.println("... " + tipoOperacion);
    }
}
userStack
  • 6,330
  • 3
  • 20
  • 41
1

No se evalúa la condición porque estás leyendo desde teclado en un bucle infinito. Prueba a introducir la condición equals("Suma") dentro del bucle.

import java.util.Scanner;

public class PruebaJava {  
    public static void main(String[] args) {
        /*float numero1;
        float numero2;
        float total;
        */Scanner lector = new Scanner(System.in);/*
        System.out.println("Ingrese un valor numerico");
        System.out.println("RECUERDA QUE PARA USAR DECIMALES USA ','");
        numero1 = lector.nextFloat();

        System.out.println("Ingrese un valor numerico X2");
        numero2 = lector.nextFloat();*/

        System.out.println("Escoja el tipo de operacion a realizar");
        System.out.println("1. Suma");
        System.out.println("2. Resta");
        System.out.println("3. Multiplicacion");
        System.out.println("4. Division");
        String tipoOperacion="";
        System.out.println("Escriba el numero o tipo de operacion");

      while (lector.hasNext())
      {
         tipoOperacion=lector.next();
         if (tipoOperacion.contentEquals("Suma") || tipoOperacion.contentEquals("suma")) {
            System.out.println("Suma!!");
        }
      }

        System.out.println("... " + tipoOperacion);
    }
}
Alejgarcia
  • 11
  • 2