0

tengo problemas con este codigo. Tendria que hacer el login, pero cuando ingreso la cadena de nombre usuario o usuario no identifica el objeto al que hago referencian y el if me regresa un false. Pienso que hay algun problema con el constructor adjunto ambos codigos.

public class usuario {
    static String nombre;
    static String tipo;
    static String pass;

    public usuario(String nombre_, String tipo_,String pass_) {
        this.nombre=nombre_;
        this.tipo=tipo_;
        this.pass=pass_;
    }

    public String getNombre() {
        return this.nombre;
    }
    public String getTipo() {
        return this.tipo;
    }
    public String getPass() {
        return this.pass;
    }
}

Y lo intento llamar desde esta otra clase

import javax.swing.*;
import java.util.ArrayList;
class principal {
    public static void main(String[] args) {
        String login;
        usuario[] bd_usuario=new usuario[3];
        JPasswordField jpf = new JPasswordField();
        JLabel titulo = new JLabel ("Ingrese su password");
        bd_usuario[0]=new usuario("Javier","admin","12345");
        bd_usuario[1]=new usuario("fernando","usuario","");
        bd_usuario[2]=new usuario("juan","usuario","");
        String usr;
        int option;
        usr=JOptionPane.showInputDialog(null,"ELIGA UNA OPCION\n\t1.-Iniciar sesion ADMINISTRADOR\n\t2.-Iniciar sesion USUARIO",JOptionPane.INFORMATION_MESSAGE);
        option=Integer.parseInt(usr);
        if (option==1) {
             int cs;
             String name;
             //String contra
             name=JOptionPane.showInputDialog(null,"Ingresa tu USUARIO");

             JOptionPane.showConfirmDialog (null, new Object[]{titulo, jpf}, "Inicio de sesion", JOptionPane.OK_CANCEL_OPTION);
             char p[] = jpf.getPassword();
             String contra= new String(p);
             for(cs=0;cs<3;cs++) {
                 if(name==bd_usuario[cs].getNombre() /*&& contra==bd_usuario[cs].getPass()*/) {
                     m=v1.menu1();
                     while(m>=1 && m<=7)    {
//demas funciones
Pablo Lozano
  • 45,934
  • 7
  • 48
  • 87
  • En la comparación del nombre, has comprobado que en los dos parámetros que comparas hay el mismo dato? Si hay el mismo dato, prueba a hacer la comparación con el método equals que es el que hay que utilizar para comparar cadenas de texto – Pablo Simon DiEstefano Dec 11 '17 at 09:34
  • Hola ya lo compare y si son diferentes. Mande la pura cadena dentro del if para ver que me mandaba asi if(name.equals("Javier") /*bd_usuario[cs].getNombre()) /*&& contra==bd_usuario[cs].getPass()*/){ System.out.print(bd_usuario[cs].getNombre()); Y me manda el nombre del "juan" que es el que esta en el 3er elemento del arreglo, a que se debera? – Javier Ale Dec 11 '17 at 09:50
  • si metes en jpf 12345, al hacer la comparación name == bd_usuario[0], que datos son los que se comparan? porque ahí si haces la comparación con un equals debería devolver true y entrar al if – Pablo Simon DiEstefano Dec 11 '17 at 09:53
  • Tampoco entra, siempre que lo ingreso incluso especificando la posición, cuando lo ejecuto sigue imprimiendo "juan" – Javier Ale Dec 11 '17 at 10:04
  • si imprimes bd_usuario[0].getNombre() te sale juan? eso si que es raro – Pablo Simon DiEstefano Dec 11 '17 at 10:17
  • "*el if me regresa un false*" Sólo hay un `if` en todo tu código y es `if (option==1)` ¿es eso lo que te falla? – PaperBirdMaster Dec 12 '17 at 08:54

1 Answers1

1

No compares objetos usando ==, usa el método .equals(...)

Cuando comparas dos objetos usando == lo que estás haciendo es comparar los punteros a dichos objetos, con lo que sólo te devolverá true si ambos objetos son el mismo. Con los objetos String, Integer... a menudo el == parece funcionar, pero es porque para ahorrar memoria se intenta reaprovechar los objetos invariables ya existentes, pero no es seguro que esto ocurra.

Si lo que estuvieses comparando fueran objetos de una clase creada por ti, entonces tendrías que redefinir (sobreescribir) el método equals, pero puesto que estás comparando Strings, debería bastar con

if(name!= null && name.equals(bd_usuario[cs].getNombre()) { ...
Pablo Lozano
  • 45,934
  • 7
  • 48
  • 87