J'apprends Java et j'ai un problème avec ArrayList
et RandomGenerator
.
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
objects de la liste.
La item
doit être sélectionnée au hasard.
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");
}
Lorsque j'essaie de compiler, j'obtiens une erreur en indiquant la ligne System.out.println
en disant ..
'impossible de trouver la variable de symbole anyItem'
anyItem
est une méthode et l'appel System.out.println
se situe après votre instruction return afin d'éviter toute compilation, car il est inaccessible.
Peut-être envie de le réécrire comme ceci:
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;
}
}
public static Item getRandomChestItem(List<Item> items) {
return items.get(new Random().nextInt(items.size()));
}
Vous devez supprimer le message system.out.println
situé en 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;
}
la déclaration return
indique essentiellement que la fonction va maintenant se terminer. tout ce qui est inclus au-delà de la déclaration return
qui est également dans la portée de celle-ci entraînera le comportement que vous avez rencontré
votre empreinte vient après votre retour - vous ne pouvez jamais atteindre cette déclaration. En outre, vous n'avez jamais déclaré que anyItem était 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 est juste un quickie - vous pouvez ajouter une méthode 'getItemDescription' qui retourne une chaîne utile à cet effet ...
Ici vous allez, utilisez 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);
}
essaye ça
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);
}
Et je vous suggère fortement de vous procurer un livre tel que Beginning Java 2 d'Ivor Horton
anyItem n'a jamais été déclaré en tant que variable, il est donc logique que cela provoque une erreur. Mais plus important encore, vous avez du code après une instruction return et cela entraînera une erreur de code inaccessible.
System.out.println ("Choix des gestionnaires cette semaine" + anyItem + "notre recommandation");
Vous n'avez pas la variable anyItem initialisée ou même déclarée.
Ce code: + anyItem +
signifie obtenir la valeur de la méthode toString de l'objet anyItem
La deuxième chose pourquoi cela ne fonctionnera pas. Vous avez System.out.print après la déclaration de retour. Le programme ne pourrait jamais atteindre cette ligne.
Vous voulez 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);
}
au fait: en Java, sa convetion de placer les parenthèses frisées sur la même ligne que la déclaration de la fonction.