Получение случайного элемента из ArrayList

Я изучаю Java, и у меня проблема с ArrayList и RandomGenerator.

У меня есть объект под названием 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");
    }

Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке, указывающее на строку System.out.println, говорящую "не могу найти символьную переменную anyItem"

Любая помощь очень ценится:) Благодаря

Ответ 1

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

Ответ 2

public static Item getRandomChestItem() {
    try {
        return items.get((new Random()).nextInt(items.size()));
    }
    catch (Throwable e){
        return null;
    }
}

Ответ 3

Вы должны удалить сообщение system.out.println ниже return, например:

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

оператор return в основном говорит, что функция теперь закончится. все, что включено за пределы инструкции return, которая также находится в ее объеме, приведет к поведению, которое вы испытали

Ответ 4

ваша печать появится после того, как вы вернетесь - вы никогда не сможете достичь этого утверждения. Кроме того, вы никогда не объявляли 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;
    }

Часть toString - это просто quickie - вам может понадобиться добавить метод getItemDescription, который возвращает полезную String для этой цели...

Ответ 5

попробуйте это

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

И я настоятельно рекомендую вам получить книгу, такую ​​как Ivor Horton Начало Java 2

Ответ 6

Как я могу видеть код
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
недостижима.

Ответ 7

anyItem никогда не был объявлен как переменная, поэтому имеет смысл, что он вызывает ошибку. Но что более важно, у вас есть код после оператора return, и это приведет к недостижимой ошибке кода.

Ответ 8

System.out.println( "Выбор менеджеров на этой неделе" + anyItem + "наша рекомендация вам" );

Вы не указали переменную anyItem, инициализированную или даже объявленную.

Этот код:  + anyItem +

означает получение значения метода toString объекта anyItem

Вторая вещь, почему это не работает. У вас есть выражение System.out.print после возврата. Программа никогда не сможет достичь этой линии.

Вероятно, вы хотите что-то вроде:

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: в Java его конвеция помещает курчавую скобку в ту же строку, что и объявление функции.

Ответ 9

Здесь вы идете, используя 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);
}

Ответ 10

См. 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()));
    });
}

Вывод:

2,857142857142857

2,857142857142857

8,571428571428571

+85,71428571428571

a: 2

b: 1

c: 9

d: 88

Ответ 11

Решение не очень хорошо, даже если вы исправили свое имя и недостижимую формулировку этой распечатки.

вещи, на которые вы должны обратить внимание 1. семя случайности и большие данные, будет содержать много элементов, количество которых равно числу случайных < itemlist.size().

  • вы не обрабатывали многопоточность, вы могли бы получить индекс из связанного исключения

Ответ 12

Вот лучший способ делать вещи:

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

public class facultyquotes
{
    private ArrayList<String> quotes;
    private String quote1;
    private String quote2;
    private String quote3;
    private String quote4;
    private String quote5;
    private String quote6;
    private String quote7;
    private String quote8;
    private String quote9;
    private String quote10;
    private String quote11;
    private String quote12;
    private String quote13;
    private String quote14;
    private String quote15;
    private String quote16;
    private String quote17;
    private String quote18;
    private String quote19;
    private String quote20;
    private String quote21;
    private String quote22;
    private String quote23;
    private String quote24;
    private String quote25;
    private String quote26;
    private String quote27;
    private String quote28;
    private String quote29;
    private String quote30;
    private int n;
    Random random;

    String teacher;


    facultyquotes()
    {
        quotes=new ArrayList<>();
        random=new Random();
        n=random.nextInt(3) + 0;
        quote1="life is hard";
        quote2="trouble shall come to an end";
        quote3="never give lose and never get lose";
        quote4="gamble with the devil and win";
        quote5="If you don’t build your dream, someone else will hire you to help them build theirs.";
        quote6="The first step toward success is taken when you refuse to be a captive of the environment in which you first find yourself.";
        quote7="When I dare to be powerful â€" to use my strength in the service of my vision, then it becomes less and less important whether I am afraid.";
        quote8="Whenever you find yourself on the side of the majority, it is time to pause and reflect";
        quote9="Great minds discuss ideas; average minds discuss events; small minds discuss people.";
        quote10="I have not failed. I’ve just found 10,000 ways that won’t work.";
        quote11="If you don’t value your time, neither will others. Stop giving away your time and talents. Value what you know & start charging for it.";
        quote12="A successful man is one who can lay a firm foundation with the bricks others have thrown at him.";
        quote13="No one can make you feel inferior without your consent.";
        quote14="Let him who would enjoy a good future waste none of his present.";
        quote15="Live as if you were to die tomorrow. Learn as if you were to live forever.";
        quote16="Twenty years from now you will be more disappointed by the things that you didn’t do than by the ones you did do.";
        quote17="The difference between a successful person and others is not a lack of strength, not a lack of knowledge, but rather a lack of will.";
        quote18="Success is about creating benefit for all and enjoying the process. If you focus on this & adopt this definition, success is yours.";
        quote19="I used to want the words ‘She tried’ on my tombstone. Now I want ‘She did it.";
        quote20="It is our choices, that show what we truly are, far more than our abilities.";
        quote21="You have to learn the rules of the game. And then you have to play better than anyone else.";
        quote22="The successful warrior is the average man, with laser-like focus.";
        quote23="Develop success from failures. Discouragement and failure are two of the surest stepping stones to success.";
        quote24="If you don’t design your own life plan, chances are you’ll fall into someone else’s plan. And guess what they have planned for you? Not much.";
        quote25="The question isn’t who is going to let me; it’s who is going to stop me.";
        quote26="If you genuinely want something, don’t wait for it â€" teach yourself to be impatient.";
        quote27="Don’t let the fear of losing be greater than the excitement of winning.";
        quote28="But man is not made for defeat. A man can be destroyed but not defeated.";
        quote29="There is nothing permanent except change.";
        quote30="You cannot shake hands with a clenched fist.";

        quotes.add(quote1);
        quotes.add(quote2);
        quotes.add(quote3);
        quotes.add(quote4);
        quotes.add(quote5);
        quotes.add(quote6);
        quotes.add(quote7);
        quotes.add(quote8);
        quotes.add(quote9);
        quotes.add(quote10);
        quotes.add(quote11);
        quotes.add(quote12);
        quotes.add(quote13);
        quotes.add(quote14);
        quotes.add(quote15);
        quotes.add(quote16);
        quotes.add(quote17);
        quotes.add(quote18);
        quotes.add(quote19);
        quotes.add(quote20);
        quotes.add(quote21);
        quotes.add(quote22);
        quotes.add(quote23);
        quotes.add(quote24);
        quotes.add(quote25);
        quotes.add(quote26);
        quotes.add(quote27);
        quotes.add(quote28);
        quotes.add(quote29);
        quotes.add(quote30);
    }

    public void setTeacherandQuote(String teacher)
    {
        this.teacher=teacher;
    }

    public void printRandomQuotes()
    {
        System.out.println(quotes.get(n++)+"  ~ "+ teacher);  
    }

    public void printAllQuotes()
    {
        for (String i : quotes)
        {
            System.out.println(i.toString());
        }
    }
}