wake-up-neo.com

Zufälliges Element aus ArrayList abrufen

Ich lerne Java und habe ein Problem mit ArrayList und RandomGenerator.

Ich habe ein Objekt namens catalogue, das eine Array-Liste von Objekten hat, die von einer anderen Klasse namens item erstellt wurden.

Ich brauche eine Methode in catalogue, die alle Informationen zu einem der item-Objekte in der Liste zurückgibt.
item muss zufällig ausgewählt werden.

import Java.util.ArrayList;
import Java.util.Random;

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

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

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

Wenn ich versuche zu kompilieren, bekomme ich eine Fehlermeldung, die auf die System.out.println-Zeile zeigt. 

'Symbolvariable anyItem kann nicht gefunden werden'

86
Will

anyItem ist eine Methode und der System.out.println-Aufruf befindet sich hinter Ihrer return-Anweisung, sodass er ohnehin nicht kompiliert werden kann, da er nicht erreichbar ist.

Vielleicht möchten Sie es erneut schreiben:

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;
    }
}
106
Robby Pond
public static Item getRandomChestItem(List<Item> items) {
    return items.get(new Random().nextInt(items.size()));
}
14
Ariel Terrani

Sie müssen die system.out.println-Nachricht unterhalb der return entfernen, wie folgt:

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;
}

die return-Anweisung besagt im Wesentlichen, dass die Funktion jetzt beendet wird. Alles, was über die return-Anweisung hinausgeht, die ebenfalls in deren Geltungsbereich fällt, führt zu dem Verhalten, das Sie erlebt haben

4
binnyb

ihr Abzug kommt nach Ihrer Rückkehr - Sie können diese Aussage niemals erreichen. Außerdem haben Sie anyItem nie als Variable deklariert. Vielleicht möchtest du

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;
    }

Der toString-Teil ist nur ein Quickie. Vielleicht möchten Sie eine Methode 'getItemDescription' hinzufügen, die einen nützlichen String für diesen Zweck zurückgibt.

3
hvgotcodes

Hier geht es mit 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);
}
2
BullyWiiPlaza

versuche dies 

    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);
    }

Und ich empfehle Ihnen dringend, ein Buch wie Ivor Hortons Beginning Java 2 zu erhalten

1
Augusto

Da kann ich den Code sehen
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
ist unerreichbar.

0
user2763281

anyItem wurde noch nie als Variable deklariert. Daher ist es sinnvoll, einen Fehler zu verursachen. Noch wichtiger ist jedoch, dass Sie nach einer return-Anweisung Code haben, und dies führt zu einem nicht erreichbaren Codefehler.

System.out.println ("Entscheidung für Manager diese Woche" + anyItem + "unsere Empfehlung an Sie");

Sie haben die Variable anyItem nicht initialisiert oder sogar deklariert. 

Dieser Code: + anyItem + 

bedeutet den Wert der toString-Methode von Object anyItem

Die zweite Sache, warum das nicht funktioniert. Sie haben System.out.print nach der Rückgabeanweisung. Das Programm konnte diese Linie niemals erreichen.

Sie wollen wahrscheinlich etwas wie:

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);

}

Übrigens: In Java wird die geschweifte Klammer in der Zeile der Deklaration der Funktion angezeigt.

0
malejpavouk