Autor
|
Tema: Programa no entra a ciclo for (Leído 3,168 veces)
|
edr89
Desconectado
Mensajes: 105
|
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?? for(i=0;i<10;i++) { carros[i] = new Barato(); //El usuario ingresa varios datos... lo importante es validar que ningun automovil tiene la misma matricula. System. out. print("Matricula: "); do { error = false; carros[i].setMatricula(scanStr.nextLine()); for(j=0; j<(i-1); j++) { if( carros[i].getMatricula().equals(carros[j].toString() ) ) { error = true; j = i; } } } while(error); 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()); }
|
|
|
En línea
|
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
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
Mensajes: 105
|
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
Mensajes: 248
|
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
Mensajes: 105
|
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? carros[i].getMatricula().equals(carros[j].toString()) 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
Mensajes: 248
|
El problema es que con == no puedes comparar Strings... Pero para estar más seguro puedes hacer carros[i].getMatricula().equalsIgnoreCase(carros[j].getMatricula())
|
|
|
En línea
|
«La suerte es el cuidado de los detalles». -Winston Churchill
|
|
|
edr89
Desconectado
Mensajes: 105
|
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(): class EqualsIsNotEqualTo { public static void main (String args []) { System. out. println(s1 + " equals " + s2 + " > " + s1. equals(s2 )); System. out. println(s1 + " == " + s2 + " > " + (s1 == s2 ) ); } }
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. do { error = false; carros[i].setMatricula(scanStr.nextLine()); for(j=0; j<i; j++) { if( error = carros[i].getMatricula().equalsIgnoreCase( carros[j].getMatricula() ) ) { j = i; System. out. print("Lo sentimos esa matricula ya esta registrada intenta de nuevo: "); } } } while(error);
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Programa en C no termina bien el ciclo
Programación C/C++
|
Xgirl12
|
3
|
2,783
|
4 Noviembre 2012, 04:28 am
por Xgirl12
|
|
|
me podrian ayudar con este programa en C por favor utilizando el ciclo FOR
Programación C/C++
|
alejandro01
|
2
|
2,821
|
26 Noviembre 2012, 00:58 am
por SonaArtica
|
|
|
Pasar programa de Ciclo if a for (cuadro magico)
.NET (C#, VB.NET, ASP)
|
ellandax
|
1
|
2,160
|
19 Noviembre 2013, 21:00 pm
por Eleкtro
|
|
|
Por que no entra al ciclo for?
Programación C/C++
|
dondaimon
|
1
|
2,002
|
14 Diciembre 2017, 23:55 pm
por kuhi
|
|
|
Como hacer un programa en c++ usando la condionante do while y ciclo for
Programación C/C++
|
Jymsa27
|
2
|
11,815
|
29 Noviembre 2023, 04:34 am
por D3s0rd3n
|
|