como qeu se atonta el if
Mas bien los que nos atontamos somos los programadores
Bueno, yo sigo diciendo que el algoritmo que quieres usar no es muy eficiente, ya que cada vez que generas un numero nuevo, buscas dentro de todo el vector, para verificar que el numero no se repita.
Aun asi, revise tu codigo mas detenidamente, pero antes de decirte que tienes mal, te dare otro consejo.
Trata de usar el depurador de Visual Studio, es muy facil de usar, y te ayudara a encontrar esos pequeños errores que se nos escapan.
En especial, usa el Paso por instrucciones (tecla F11) y el Paso por procedimentos (F10) ademas de la inspeccion de variables, y ejecuta paso por paso tu programa en las partes mas citicas, y cuando hayas depurado ciertas partes, utilza puntos de interrupcion, para que tu progama se detenga solo en ciertas partes, y depures mas facil, todo esto combinado con la inspeccion de variables como dije antes.
Bueno, ahora si, vamos al fondo del problema
El problema es esta instruccion, o sea, el ciclo que revisa el vector desde el principio para verificar que no haya repetidos:
for (int j = 0; j < 10; j++)
1. Para empezar, la condicion j < 10 es incorrecta, ya que revisas
todo el vector aun cuando este no esta lleno todavia, lo mas correcto seria revisar solo hasta donde hayamos leido, o sea la condicion seria j < i.
2. El orden de evaluacion del ciclo for es como sigue:
a. Inicializa la variable j (j = 0)
b. Pregunta si j < 10, si es verdadero entra al ciclo, si es falso, sale del ciclo.
c. cuerpo del ciclo.
d. incrementa j y regresa al paso b.
e. salida del ciclo
Por lo tanto, dentro de tu ciclo, cuando tu haces:
if (aux[j] == num)
{
num = r.Next(0, 10);
j = 0;
}
Tu regresas j a cero, pero despues de eso, el for incrementa j
antes de preguntar si j < 10, por lo tanto, cuando entra al ciclo, en realidad j vale 1 y no cero como podrias suponer, asi que se
salta el primer elemento en la comparacion de repetidos. Entonces si random te repite el numero que esta en la primera posicion del vector, no te lo cambia, porque el for se salta el primer elemento. De hecho si ejecutas el programa, veras que el numero que se repite cuando se llega a repetir, siempre es el de la primera posicion. (en tu ejemplo es el 4 el que esta en la primera, y ese es precisamente el que se repite
)
La solucion correcta entonces seria usar un ciclo while en lugar de un ciclo for, e incrementar la variable j,
solamente cuando el numero no este repetido
int j = 0;
while (j < i)
{
if (aux[j] == num)
{
num = r.Next(0, 10);
j = 0;
}
else
{
j++;
}
}
Pruebalo y veras que ahora si funciona correctamente.
Todo esto lo encontre usando las opciones de depuracion de Visual Studio, asi que sigue mi consejo y depura tu mismo con el depurador, veras que es increible.
Bueno, fue divertido mientras duro
Saludos