Título: Cadena aleatoria de caracteres Publicado por: DaniSM98 en 15 Enero 2018, 09:06 am Hola buenas, tengo este código:
char[] chr={'d','a','n','i','e','l'}; char[] aleatorio=new char[6]; for(int i=0;i<=5;i++){ aleatorio=chr[(int)(Math.random()*6)]; System.out.print(aleatorio); De esta manera, me devuelve una cadena de 6 caracteres totalmente aleatoria, repitiendo algunos caracteres, ¿qué podría añadir para que en el resultado no se repitiera ningún caracter? Gracias, un saludo. Título: Cadena aleatoria de caracteres (random shuffling) Publicado por: z3nth10n en 15 Enero 2018, 09:54 am En vez de iterar sobre la array lo que deberías hacerle es un Shuffle, es decir, barajar el array...
https://stackoverflow.com/questions/14720134/is-it-possible-to-random-shuffle-an-array-of-int-elements Como te dicen aquí, perdón, por no publicar yo mismo una respuesta (no manejo mucho de C++), con la librería "<algorithm>" puedes llamar al método random_shuffle. (El problema no tiene que ver con lo tuyo, simplemente es un problema de punteros, pero me sirve de ejemplo) EDIT: Acabo de leer el comentario de Elektro, es Java, cierto, bueno, la idea es la misma, es usar random shuffling, tanto su propuesta como por ejemplo, puede ser esta: https://stackoverflow.com/a/43892363/3286975 Básicamente, sugiere usar el metodo shuffle de la clase Collections que forma parte del paquete java.util.Collections. Más info: https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle(java.util.List) PD: Aunque haya metido la gamba, dejo la opción en C++ para el que necesite info para saber como se hace. Un saludo. Título: Re: Cadena aleatoria de caracteres Publicado por: Eleкtro en 15 Enero 2018, 10:01 am
Saludos. Título: Re: Cadena aleatoria de caracteres Publicado por: Serapis en 15 Enero 2018, 10:08 am Remplazanso el que ha salido, por el último y reduciendo el bucle...
Código: array chr Al inicio tienes DANIEL Al empezar se elige entre 0 y 5, supongamos que sale el 2 (la 'N') la imprimes, luego la remplazas por el carácter en ese ciclo ( el máximo elegible) entonces ahora te queda: DALIE'N y ahora en el siguiente ciclo ( el 4) eliges entre 0 y 4, luego ya no sale repetido la 'N', aunque sí salga repetido el valor 2, pero ahora su contenido es otro... supongamos que ahora sale el 0... la 'D'... se remplaza por el último valor visitable (como estamso en el ciclo 4, el carácter en ese índice es la 'E' ahora queda así: EALI'DN el apóstrofo es para indicar la separación entre los elegibles y los ya elegidos en ciclos pasados. ahora en el cilo 3 toca elegir entre 0 y3, supongamos que sal eel 2, la letra 'L' nuevamente la remplazamos por la última elegible (la 3), la I ahora nos queda así: EAI'LDN toca el ciclo 2, supongmaos que sale el 1, letra A hacmeos el intercambio la que sale por la última elegible del ciclo, A por I, ahora nos queda así: EI'ALDN toca el cliclo 1, pongamos que sale el 0, la 'E' remplazamos el que sale por el último elegible, la E por la I finalmente nos queda así: I'EALDN es estéril elegir para el bucle 0, no hay elección si solo se puede elegir, 1, por eso el bucle acaba en el 1 y no en el 0. El array al final contiene: IEALDN, exactamente están en orden inverso a como han salido, luego estamos reusando el mismo array de la entrada para la salida (si esto es aceptable, si no debe hacerse copia del array en la entrada, mejor en la llamada). ----------------------- Dejo a tu esfuerzo y capacidad, modificar el pseudocódigo, para que al final del bucle (sin ninguna operación posterior) te quede el array ordenado correctamente en el mismo orden en que han ido saliendo... Título: Re: Cadena aleatoria de caracteres Publicado por: rub'n en 21 Enero 2018, 08:22 am Interesante hacerlo ;D con los tips de los muchachos , y de verdad que no se repiten :D
Código
Aplicando Java 8 Código
(http://i63.tinypic.com/25rd0rd.jpg) / |