Erro em código randomico

4 respostas
Algebra

O objetivo dessa rotina é sortear somente os numeros que foram passados pelo collection

ArrayList<Integer> listInt = new ArrayList<Integer>();

Collections.addAll(listInt, 3, 4, 10, 11, 13, 19, 20, 21, 22, 23, 25); //o indice das palavras desejadas randomicamente

 j = StringManipulation.getRandom(listInt, 26); //inicializa j -- as vezes dá um erro neste método

O método getRandom agora

public static int getRandom(ArrayList<Integer> Wanted, int i){
       Random r = new Random();        
       int number = (int)(Math.random()*i);
        // encontra o numero desejado
        while (!Wanted.contains(number)) {
            number = r.nextInt(number);
        }
        return number;
 }

Alguem consegue encontrar onde está acontecendo o erro?

4 Respostas

javer

O que é esse número 26? Você quer procurar 26 naquela lista de inteiros? E quer retornar o que? O índice?

danilo.coppi

Seu problema é quando o “number” vem com o valor 0…

pois o metodo nextInt suporta apenas numeros positivo (acima de 0)

Seu código deveria ficar da seguinte forma:

public static int getRandom(ArrayList&lt;Integer&gt; Wanted, int i){  
        Random r = new Random();          
        int number = (int)(Math.random()*i);  
         // encontra o numero desejado  
         while (!Wanted.contains(number))
             number = r.nextInt(26);  
         }  
         return number;  
 }
Algebra

não posso ter um numero fixo dentro do método danilo

Algebra

Eu entendi sua observação danilo, e vou detalhar

Antigo código

public static int getRandom(ArrayList<Integer> Wanted, int i){
       Random r = new Random();        
       int number = (int)(Math.random()*i);
        // encontra o numero desejado
        while (!Wanted.contains(number)) {
            number = r.nextInt(number);
        }
        return number;

    }

É que quando meu number recebia um numero abaixo dos que estão na lista
ele retornava um erro, pois não conseguia atingir mais nenhum que estivesse na lista

Código melhorado

public static int getRandom(ArrayList<Integer> Wanted, int i){
       Random r = new Random();        
       int number = (int)(Math.random()*i);
        // encontra o numero desejado
        while (!Wanted.contains(number)) {
            number = r.nextInt(i);
        }
        return number;

    }
Criado 8 de abril de 2011
Ultima resposta 8 de abr. de 2011
Respostas 4
Participantes 3