How do I generate random numbers between 5 and 30 in Java?

Asked

Viewed 1,306 times

1

I need to use the Random method and store it in a distance variable, then show the distance from city A to city B, and from city A to city D, that is, a different random number for each distance from A. After creating the instances of the City class and their respective distances, I need to compare whether from City B to City A and from City D to City A have the same amount, if the random number is the same.

At the time of seeing the information of the cities the values of the distances do not match, I’m using the toString method to see this information

//Estou usando esse método
while(true){  
    Random r = new Random();  
    int i = r.nextInt(30)+1;


// São acrescentadas as informações das cidades após elas serem criadas
    Cidade cA = new Cidade("A", 200, "Geraldo", "Cidades B e D", r.nextInt(30)+1, r.nextInt(30)+1);
    Cidade cB = new Cidade("B", 250, "Silvia", "Cidades A , C e F", cA.getDistancia1(), r.nextInt(30)+1, r.nextInt(30)+1);
    Cidade cC = new Cidade("C", 220, "João", "Cidades B e D", cB.getDistancia2(), r.nextInt(30)+1);
    Cidade cD = new Cidade("D", 250, "Pedro", "Cidades A , C e E", cA.getDistancia2(), cC.getDistancia2(),r.nextInt(30)+1);
    Cidade cE = new Cidade("E", 350, "Maria", "Cidades D e G", cD.getDistancia3(), r.nextInt(30)+1);
    Cidade cF = new Cidade("F", 300, "Vítor", "Cidades B e G", cB.getDistancia3(), r.nextInt(30)+1);
    Cidade cG = new Cidade("G", 400, "Miguel", "Cidades E e F", cE.getDistancia2(), cF.getDistancia2());



// continuação do código
}

1 answer

4


You can do it like this:

  public static int geraAleatorio(int max, int min) {
        Random random = new Random();
        return (random.nextInt(max - (min - 1)) + min);
    }

This will generate a random number at most 30, and at least 5.
If you want you can convert the possible values of the range 30-5(25) numbers. to a List, or another subclass(Arraylist> of List.

List<Integer> lista = IntStream.generate(()->geraAleatorio(30, 5)).limit(100).distinct().boxed().collect(Collectors.toList());

And then display: lista.forEach(e-> System.out.print(e + " "));
Or take a random value from the list.

int num = lista.stream().findAny().map(Integer::intValue).get();

Browser other questions tagged

You are not signed in. Login or sign up in order to post.