Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Coke951 en 18 Abril 2015, 07:25 am



Título: Mezclar 2 datos tipo String.
Publicado por: Coke951 en 18 Abril 2015, 07:25 am
Que tal, me estaba preguntando como hacer una mezcla de un string que contiene letras y otro string que contiene numeros de forma aleatoria.
Lo hice de esta forma, pero se me hace muy complicada y no funciona del todo bien.
Se que existen muchas formas de hacer esto, me gustaria saber si alguien ya lo ha hecho antes y encontro alguna forma simple o minimo que funcione del todo.

Código:
import java.util.Scanner;
import java.util.Random;

class Mezclador{
//variables instancia
private String letras;
private String numeros;

public Mezclador(String letras, String numeros){
establecerLetrasYNumeros(letras, numeros);
}

public void establecerLetrasYNumeros(String let, String num){
letras = let;
numeros = num;
}

public String obtenerMix(){
String mixed = "";
StringBuffer mix = new StringBuffer(letras);
Random random = new Random();
int numRandom = random.nextInt(numeros.length());
int varNum = 0;
int varLet = 0;
for(int x = 0; x < 2 ; x++){
varNum = random.nextInt(numeros.length());
varLet = random.nextInt(letras.length());
mixed += mix.insert(varLet, numeros.charAt(varNum));
}
return mixed;
}
}

Prueba de Escritorio:
(http://img1.imagilive.com/0415/cap887.png)

Gracias de antemano.


Título: Re: Mezclar 2 datos tipo String.
Publicado por: Usuario Invitado en 18 Abril 2015, 15:29 pm
Crea un List<String> y agrégale 2 arrays: las letras ingresadas y los números ingresados. Ingresa los números y letras separados por espacios y aplica el método split(" ") para obtener un array de las letras. Lo mismo para los números.

Luego, convierte esos arrays a List con Arrays.asList y, finalmente aplica el método shuffle para mezclarlos. Importante, pasar como segundo parámetro una semilla, para que todas las veces mezcle la lista diferente.

Código
  1. import java.util.Random;
  2. import java.util.List;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import java.util.Scanner;
  7.  
  8. public class Main {
  9.    public void insertLists(List<String> parent, List<String>... lists) {
  10.        for(List<String> current : lists) {
  11.            parent.addAll(current);
  12.        }
  13.    }
  14.    public void suffle(List<String> list) {
  15.        Collections.shuffle(list, new Random(System.nanoTime()));
  16.    }
  17.    public static void main(String[] args) {
  18.        Main main = new Main();
  19.        List<String> mix = new ArrayList<>();
  20.        try {
  21.            final Scanner reader = new Scanner(System.in);
  22.            System.out.println("Ingrese las letras separadas por espacios");
  23.            String[] letters = reader.nextLine().split(" ");
  24.            System.out.println("Ingrese los números separados por espacios");
  25.            String[] numbers = reader.nextLine().split(" ");
  26.            main.insertLists(mix, Arrays.asList(letters), Arrays.asList(numbers));
  27.            main.suffle(mix);
  28.        } catch(Exception e) {
  29.            System.out.println("Ha ocurrido un error. Vea el rastreo de pila");
  30.            e.printStackTrace();
  31.            System.exit(-1);
  32.        }
  33.        for(String digit : mix) {
  34.            System.out.print(digit);
  35.        }
  36.    }
  37. }


Título: Re: Mezclar 2 datos tipo String.
Publicado por: Coke951 en 18 Abril 2015, 20:33 pm
Perfecto, nunca habia tocado lo de List y Array List, en mi clase de POO nunca lo he visto, investigare mas pero tu codigo funciona de maravilla y se como modificarlo para lo que necesito.

Muchas Gracias Gus Garsaky!