125 votes

Récupération d'un élément aléatoire dans une liste de tableaux (ArrayList)

Je suis en train d'apprendre Java et j'ai un problème avec ArrayList y Random .

J'ai un objet appelé catalogue qui contient une liste d'objets créés à partir d'une autre classe appelée item .

J'ai besoin d'une méthode dans catalogue qui renvoie toutes les informations sur l'un des item dans la liste.
Les item doit être choisi au hasard.

import java.util.ArrayList;
import java.util.Random;

public class Catalogue
{
    private Random randomGenerator = new Random();
    private ArrayList<Item> catalogue;

    public Catalogue ()
    {
        catalogue = new ArrayList<Item>();  
    }

    public Item anyItem()
    {
        int index = randomGenerator.nextInt(catalogue.size());
        System.out.println("Managers choice this week" + catalogue.get(index) + "our recommendation to you");
        return catalogue.get(index);
    }

Lorsque j'essaie de compiler, j'obtiens une erreur qui pointe vers le fichier System.out.println ligne disant

Impossible de trouver le symbole de la variable anyItem

1voto

Augusto Points 14531

Essayez ceci

    public Item anyItem()
    {
        int index = randomGenerator.nextInt(catalogue.size());
        System.out.println("Managers choice this week" + catalogue.get(index) + "our recommendation to you");
        return catalogue.get(index);
    }

Je vous conseille vivement de vous procurer un livre, tel que Beginning Java 2, d'Ivor Horton.

0voto

AnyItem n'a jamais été déclaré comme variable, il est donc logique qu'il provoque une erreur. Mais plus important encore, vous avez du code après une instruction de retour et cela provoquera une erreur de code inaccessible.

0voto

malejpavouk Points 1324

System.out.println("Choix des managers cette semaine" + anyItem + "notre recommandation pour vous") ;

Vous n'avez pas initialisé ni même déclaré la variable anyItem.

T + anyItem +

signifie obtenir la valeur de la méthode toString de l'objet anyItem

La deuxième raison pour laquelle cela ne fonctionne pas. Vous avez System.out.print après l'instruction return. Le programme ne peut jamais atteindre cette ligne.

Vous souhaitez probablement quelque chose comme :

public Item anyItem() {
    int index = randomGenerator.nextInt(catalogue.size());
    System.out.println("Managers choice this week" + catalogue.get(index) + "our recommendation to you");
    return catalogue.get(index);

}

btw : en Java, la convetion est de placer la parenthèse curly sur la même ligne que la déclaration de la fonction.

0voto

user2763281 Points 301

Comme je peux le voir, le code
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
est inaccessible.

0voto

NathanSoares Points 11

Véase https://gist.github.com/nathanosoares/6234e9b06608595e018ca56c7b3d5a57

public static void main(String[] args) {
    RandomList<String> set = new RandomList<>();

    set.add("a", 10);
    set.add("b", 10);
    set.add("c", 30);
    set.add("d", 300);

    set.forEach((t) -> {
        System.out.println(t.getChance());
    });

    HashMap<String, Integer> count = new HashMap<>();
    IntStream.range(0, 100).forEach((value) -> {
        String str = set.raffle();
        count.put(str, count.getOrDefault(str, 0) + 1);
    });

    count.entrySet().stream().forEach(entry -> {
        System.out.println(String.format("%s: %s", entry.getKey(), entry.getValue()));
    });
}

Sortie :

2.857142857142857

2.857142857142857

8.571428571428571

85.71428571428571

a : 2

b : 1

c : 9

d : 88

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X