Получение случайного элемента из ArrayList [дубликат]



этот вопрос уже есть ответ здесь:




  • Случайный выбор элемента из списка

    2 ответы



Я изучаю 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 строка..




'не удается найти символ переменной любому элементу'


602   12  

12 ответов:

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

возможно, вы захотите переписать его так:

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

вы должны удалить 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;
}

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

печать приходит после того, как вы вернуться, вы никогда не сможете достичь этого заявления. Кроме того, вы никогда не заявляли любому элементу, чтобы быть переменной. Вы можете захотеть

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 часть-это просто халтура, -- вы, возможно, захотите, чтобы добавить метод 'getItemDescription', который возвращает строку полезны для этой цели...

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

попробуй такое

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

и я настоятельно рекомендую вам получить книгу, такую как начало Java 2 Айвора Хортона

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

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

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

вещи, на которые вы также должны обратить внимание 1. семя случайности и большие данные, будет num элемента настолько большим, что возвращается num этого случайного

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

см.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

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

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

Comments

    Ничего не найдено.