从ArrayList中检索一个随机项目

我正在学习Java,并且遇到了ArrayListRandomGenerator的问题。

我有一个名为catalogue的对象,其中有一个名为item另一个类创build的对象的数组列表。 我需要在catalogue中的一个方法返回列表中的一个item对象的所有信息。 该item需要随机select。 我已经使用了随机生成器util,但我无法得到它的工作。 我搞不清楚我做错了什么。

 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行说'找不到符号variablesanyItem'

任何帮助非常感谢:)谢谢

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; } } 
 public static Item getRandomChestItem() { try { return items.get((new Random()).nextInt(items.size())); } catch (Throwable e){ return null; } } 

您必须从return下面删除system.out.println消息,如下所示:

 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声明都将导致您所经历的行为

你的印刷品在你回来之后就来了 – 你永远无法达到这个声明。 此外,你从来没有宣布anyItem是一个variables。 你可能想要

 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…

尝试这个

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

我强烈build议你拿一本书,比如Ivor Horton的Java 2 Beginning

我可以看到代码
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
是无法达到的。

anyItem从来没有被声明为一个variables,所以它是有道理的,它会导致一个错误。 但更重要的是,你有一个返回语句后的代码,这将导致无法访问的代码错误。

System.out.println(“本周的经理人select”+ anyItem +“我们给你的build议”);

你没有variablesanyItem初始化,甚至宣布。

这个代码:+ anyItem +

意味着获取Object anyItem的toString方法的值

第二件事为什么这不会工作。 返回语句后有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); 

}

顺便说一下:在Java中,它将花括号放在与函数声明相同的行上。

在这里,你去使用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); } 

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

a2

b:1

c:9

d:88

解决scheme不好,即使你修复了打印出来的命名和不可达的陈述。

你应该注意的事情1.随机性种子,和大数据,将项目的数量这么大随机返回的数量<itemlist.size()。

  1. 你没有处理multithreading,你可能会得到索引超出限制的例外

这是一个更好的做事方式:

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