elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Programa no entra a ciclo for
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa no entra a ciclo for  (Leído 2,967 veces)
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Programa no entra a ciclo for
« en: 6 Junio 2015, 22:17 pm »

Hola a todos tengo dos ciclos anidados pero al compilar, el ciclo con el indice j no lo esta ejecutando. Error es una variable booleana y mientras la matricula coincida con otro registro sera true.
Lo mas extraño de todo es que sí permite ingresar la matricula pero nunca entra al ciclo
. Estuve imprimiendo las variables e incluso mensajes aleatorios para ver hasta donde sí corre el programa y el ciclo for con índice j nunca lo hace.

Me podrian dar alguna pista?? :huh:
Código
  1. for(i=0;i<10;i++) {
  2.  
  3.            carros[i] = new Barato();
  4.            //El usuario ingresa varios datos... lo importante es validar que ningun automovil tiene la misma matricula.
  5.  
  6.            System.out.print("Matricula: ");
  7.            do {
  8.                error = false;
  9.                carros[i].setMatricula(scanStr.nextLine());
  10.                for(j=0; j<(i-1); j++) {
  11.                    if( carros[i].getMatricula().equals(carros[j].toString() ) ) {
  12.                        error = true;
  13.                        j = i;
  14.                    }
  15.                }
  16.            } while(error);  
  17.            System.out.println("Usted ha ingresado:\n" + carros[i].getMarca() +" "+ carros[i].getModelo()+ " color " + carros[i].getColor() +  ", precio: " + carros[i].getPrecio() + ", matricula: " + carros[i].getMatricula());
  18.        }


En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Programa no entra a ciclo for
« Respuesta #1 en: 6 Junio 2015, 22:26 pm »

Hombre, pues supongo que será porque la condición del segundo for es que j sea menor que i-1. Cuando entra por primera vez al primer for, i vale 0, al entrar al for anidado, sigue valiendo lo mismo, y le estás diciendo que ese for se ejecute mientras j (que inicializas a 0) sea menos que i (0) - 1, así que no entrará nunca.


En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: Programa no entra a ciclo for
« Respuesta #2 en: 6 Junio 2015, 22:44 pm »

Hombre, pues supongo que será porque la condición del segundo for es que j sea menor que i-1. Cuando entra por primera vez al primer for, i vale 0, al entrar al for anidado, sigue valiendo lo mismo, y le estás diciendo que ese for se ejecute mientras j (que inicializas a 0) sea menos que i (0) - 1, así que no entrará nunca.

Exacto esa es la intencion, cuando i=0 significa que es el primer dato registrado por lo tanto no hay nada que validar y no entra al ciclio pero cuando estoy registrando el tercero o enesimo automovil entonces:

i=3, j=0, condicion j < (3-1), por lo tanto deberia entrar al ciclo sin embargo no lo hace  :-\
En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Programa no entra a ciclo for
« Respuesta #3 en: 6 Junio 2015, 23:55 pm »

Pues no se, lo de j = i dentro del if es para que cuando entre al if no siga en el for ¿? Por que si es así puedes utilizar un break;

¿O para que lo utilizas?
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: Programa no entra a ciclo for
« Respuesta #4 en: 7 Junio 2015, 00:06 am »

Si, lo uso para salir del ciclo, siempre uso break cuando implemento un switch pero no en for., tambien es valido?

Ayer estuve haciendo pruebas y pensaba que el error estaba en la condicion if, son equivalentes las siguientes expresiones?

Código
  1. carros[i].getMatricula().equals(carros[j].toString())
  2.  
  3. carros[i].getMatricula() == carros[j].getMatricula

Primero intente con == pero netbeans me daba advertencias y decia que usara equals. El metodo toString() solo regresa la matricula.
En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Programa no entra a ciclo for
« Respuesta #5 en: 7 Junio 2015, 03:18 am »

El problema es que con == no puedes comparar Strings...

Pero para estar más seguro puedes hacer

Código
  1. carros[i].getMatricula().equalsIgnoreCase(carros[j].getMatricula())
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: Programa no entra a ciclo for
« Respuesta #6 en: 7 Junio 2015, 08:41 am »

Sí! encontré la respuesta en Naughton Patrick (1996), The Java Handbook, pág 154

El error esta en que las funciones equals y equalsIgnoreCase regresan true si el parametro tiene los mismos caracteres que el objeto al que llama el método. Hay un ejemplo clave que explica la igualdad == y el método equals():

Código
  1. class EqualsIsNotEqualTo {
  2.    public static void main(String args[]) {
  3.    String s1 = "Hello";
  4.    String s2 = new String(s1);
  5.    System.out.println(s1 + " equals " + s2 + " > " + s1.equals(s2));
  6.    System.out.println(s1 + " == " + s2 + " > " + (s1 == s2) );
  7.    }
  8. }
  9.  
Como los dos strings representan dos objetos distintos la referencia de las variables no son las mismas y por lo tanto la igualdad == regresa falso

El método EqualsIgnoreCase es mucho mejor para este caso.

Código
  1. do {
  2.                error = false;
  3.                carros[i].setMatricula(scanStr.nextLine());              
  4.                for(j=0; j<i; j++) {
  5.                    if( error = carros[i].getMatricula().equalsIgnoreCase( carros[j].getMatricula() )  ) {
  6.                        j = i;
  7.                        System.out.print("Lo sentimos esa matricula ya esta registrada intenta de nuevo: ");
  8.                    }
  9.                }
  10.            } while(error);
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines