从ArrayList中检索随机项

Wil*_*ill 98 java random arraylist

我学习Java,我有一个问题ArrayListRandomGenerator.

我有一个名为的对象catalogue,它有一个从另一个被调用的类创建的对象数组列表item.

我需要一个方法,catalogue其中返回item列表中的一个对象的所有信息.
item随意选择的需求.

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");
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我得到一个指向System.out.println行的错误说..

'找不到符号变量anyItem'

Rob*_*ond 111

anyItem是一个方法,并且System.out.println调用在return语句之后,因此无法编译,因为它无法访问.

可能想重写它像:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些在这里寻找更简洁答案的人:Object randomItem = list.get(new Random().nextInt(list.size())) (86认同)
  • 如果你使用Java 7,`list.get(ThreadLocalRandom.current().nextInt(list.size()))` (24认同)

小智 21

public static Item getRandomChestItem(List<Item> items) {
    return items.get(new Random().nextInt(items.size()));
}
Run Code Online (Sandbox Code Playgroud)


hvg*_*des 5

你回来后打印出来——你永远无法达到那个声明。此外,您从未将 anyItem 声明为变量。你可能想要

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;
    }
Run Code Online (Sandbox Code Playgroud)

toString 部分只是一个快捷方式——您可能想要添加一个方法“getItemDescription”,该方法为此目的返回一个有用的字符串......


Bul*_*aza 5

在这里,使用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);
}
Run Code Online (Sandbox Code Playgroud)