0

resulta que estoy haciendo una clase, y en un método tengo un if else dentro de un for:

            for(int i=0; i<usuariosProfes.length && sigue; i++) {

                if(usuariosProfes[i].obtenerEmail() == usuario.obtenerEmail()
                && usuariosProfes[i].obtenerContraseña() == usuario.obtenerContraseña()) {

                    JOptionPane.showMessageDialog(null, email + " - " + contraseña);

                }else {

                    JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrectos");
                    System.out.println(usuariosProfes[i].obtenerEmail() + usuario.obtenerEmail() +
                            usuariosProfes[i].obtenerContraseña()+ usuario.obtenerContraseña());
                    sigue = false;

                }

            }

Lo que ese bloque suelta es "Usuario o contraseña incorrectos". El problema no es el resto del método, porque literalmente, al imprimir los métodos en la consola ¡Los muestra exactamente iguales! Porqué toma los datos ingresados como si fueran diferentes? Aclaro, los dos métodos imprimen resultados de tipo String, sino habría un error de compilación.

Gracias de antemano!

Oto
  • 17
  • 4
  • para que sirve el "&&" en `for(int i=0; i – junior Apr 16 '20 at 21:03
  • Sirve para detenerlo una vez que el boolean sigue se haga false, como dice el ejercicio. El boolean se hace false cuando pasa por el else, porque parece que es el else el que se está ejecutando! – Oto Apr 16 '20 at 21:09
  • Esto es un error muy común cuando iniciamos en el mundo de la programación,debes recordar que en el lenguaje Java se utiliza la función .equals() para comparar cadenas, NUNCA debería usarse el operador == , saludos. @Oto – Jorgesys Apr 16 '20 at 22:05

3 Answers3

0

te recomiendo utilizar break; en vez de la variable sigue

for(int i=0; i<usuariosProfes.length; i++) {

           if(usuariosProfes[i].obtenerEmail() == usuario.obtenerEmail() && usuariosProfes[i].obtenerContraseña() == usuario.obtenerContraseña()) {

                JOptionPane.showMessageDialog(null, email + " - " + contraseña);

            }else {

                JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrectos");
                System.out.println(usuariosProfes[i].obtenerEmail() + usuario.obtenerEmail() +
                        usuariosProfes[i].obtenerContraseña()+ usuario.obtenerContraseña());
                break;

            }

        }

en el caso de que no quieras usar break utiliza un while

junior
  • 780
  • 4
  • 22
  • 1
    Hola, me recomendaron no usar `break;` ya que es causante de muchos bugs. De todas formas lo probé pero el resultado sigue siendo el mismo! – Oto Apr 16 '20 at 21:30
  • @oto este algoritmo solo te compara la primera posicion del usuariosProfes si llega a ser falso te saca y no seguiria comparando – junior Apr 16 '20 at 21:36
  • @Oto *me recomendaron no usar `break;`, ya que es causante de muchos bugs...* No es del todo cierto, si la sentencia `break` ocasionara bugs, nunca se hubiese introducido al lenguaje. Con el `break` puedes romper el ciclo para evitar hacer iteraciones innecesarias y en algunas situaciones te ahorra usar variables booleanas. Siempre que alguien no te recomiende algo, debes decirle el "porque", así sabrás los verdaderos motivos. – MrDave1999 Apr 16 '20 at 22:24
0

Revisa esta pregunta:

¿Cómo comparar correctamente Strings (y objetos) en Java?

En el lenguaje Java se utiliza la función .equals() para comparar cadenas, NUNCA debería usarse el operador == .

El problema se debe a que realizas una comparación incorrecta de cadenas, es incorrecto usar el operador == :

if(usuariosProfes[i].obtenerEmail() == usuario.obtenerEmail()
                && usuariosProfes[i].obtenerContraseña() == usuario.obtenerContraseña()) {

debes usar .equals() :

if(usuariosProfes[i].obtenerEmail().equals(usuario.obtenerEmail())
                && usuariosProfes[i].obtenerContraseña().equals(usuario.obtenerContraseña())) {
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
-1

El problema es que estas comparando las cadenas de texto (String) con ==, pero en java para comparar cadenas de texto se usa la propiedad equals().

Debes modificar tu código y dejarlo de la siguiente manera:

for(int i=0; i<usuariosProfes.length && sigue; i++) {

                if(usuariosProfes[i].obtenerEmail().equals(usuario.obtenerEmail()) 
                && usuariosProfes[i].obtenerContraseña().equals(usuario.obtenerContraseña())) {

                    JOptionPane.showMessageDialog(null, email + " - " + contraseña);

                }else {

                    JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrectos");
                    System.out.println(usuariosProfes[i].obtenerEmail() + usuario.obtenerEmail() +
                            usuariosProfes[i].obtenerContraseña()+ usuario.obtenerContraseña());
                    sigue = false;

                }

 }
Steven Camargo
  • 494
  • 4
  • 14