Bem, eu fiz um pequeno exercício aqui para embaralhar uma String, até aí tudo bem, mas eu usei StringBuilder e um laço for para isso, mas eu sei que existe o Collections.shuffle…
Mas o que eu reparei é que eu não consigo fazer nenhuma List.
O meu código atual é esse.
[code]public static String shuffle(String origem) {
Random r = new Random();
StringBuilder org = new StringBuilder(origem);
StringBuilder fim = new StringBuilder();
int tamanho = org.length();
for (int i=0;i<tamanho;i++) {
int rch = r.nextInt(org.length());
fim.append(org.charAt(rch));
org = org.deleteCharAt(rch);
}
return fim.toString();
}[/code]
Eu queria algo mais ou menos assim:
public static String shuffle(String origem) {
List<char> lista = new ArrayList<char>(Arrays.asList(origem.toCharArray()));
Collections.shuffle(lista);
return ...
}
O problema é que eu não consigo fazer uma lista com , nem com .
Esse é o único jeito de fazer o exercício? Vou ter que realmente usar um laço for com StringBuilder ao em vez de Collections.shuffle?
Isso não funciona?public static String shuffle(String origem) {
char[] arr = origem.toCharArray();
Collections.shuffle(Arrays.asList(arr));
return new String(arr);
}
EDIT: hmm. Há algo errado ainda. Deixa eu ver o que é.
Listas são de objetos. Use List
Arrays podem ser primitivos ou não. Utilize um array de char que pesa menos que uma lista de Character
O problema é que não existe um Arrays.suffle
Portanto tem que converter para List . Na mão!, porque Arrays.asList tb não irá funcionar (um char não é um Character e viceversa
O mais eficietne seria randomizar o array , mas aqui fica o exemplo com suffle
[code]
char[] caracteres = “String a embaralhar”.toCharArray();
List ocharaters = new ArrayList(caracteres.length);
Bom, acho que minha dúvida foi resolvida com o código acima
Mas de qualquer modo meu código vai ficar um pouquinho longo, mas vou ficar com o meu código mesmo.
E o que percebi também é que eu estava fazendo Arrays.asList( str.toCharArray() ), e isso seria uma “Lista de arrays” porque str.toCharArray() retorna char[] e não os argumentos para asList