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

128voto

Robby Pond Points 37875

anyItem est une méthode et l'élément System.out.println se trouve après votre déclaration de retour, donc cela ne compilera pas de toute façon puisqu'il est inaccessible.

Il faudrait peut-être le réécrire comme suit :

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

public class Catalogue
{
    private Random randomGenerator;
    private ArrayList<Item> catalogue;

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

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

53voto

Ariel Terrani Points 193
public static Item getRandomChestItem(List<Item> items) {
    return items.get(new Random().nextInt(items.size()));
}

5voto

hvgotcodes Points 55375

Votre impression vient après votre retour - vous ne pouvez jamais atteindre cette déclaration. De plus, vous n'avez jamais déclaré un élément comme étant une variable. Vous pourriez vouloir

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

La partie toString n'est qu'un rapide coup de pouce -- vous pourriez ajouter une méthode "getItemDescription" qui renvoie une chaîne de caractères utile à cette fin...

5voto

BullyWiiPlaza Points 5382

Voici, en utilisant Generics :

private <T> T getRandomItem(List<T> list)
{
    Random random = new Random();
    int listSize = list.size();
    int randomIndex = random.nextInt(listSize);
    return list.get(randomIndex);
}

4voto

binnyb Points 10492

Vous devez retirer le system.out.println message du dessous de la return comme ceci :

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

les return indique en fait que la fonction va se terminer. Tout ce qui est inclus au-delà de l'instruction return qui est également dans le champ d'application de la déclaration aura pour résultat le comportement que vous avez expérimenté

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