Retrieving a random item from ArrayList

I'm learning Java and I'm having a problem with ArrayList and Random.

I have an object called catalogue which has an array list of objects created from another class called item.

I need a method in catalogue which returns all the information on one of the itemobjects in the list.
The item needs to be selected at random.

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


public class Catalogue
{
private Random randomGenerator = new Random();
private ArrayList<Item> catalogue;


public Catalogue ()
{
catalogue = new ArrayList<Item>();
}


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

When I try to compile I get an error pointing at the System.out.println line saying..

'cannot find symbol variable anyItem'

268447 次浏览

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

你的指纹会在你回来之后出现——你永远也得不到那个证词。另外,您从未将 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 部分只是一个简单的步骤——您可能希望添加一个方法‘ getItemDescription’,该方法为此目的返回一个有用的 String..。

您必须从 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语句范围的内容都将导致您所经历的行为

试试这个

    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》

AnyItem 从未被声明为变量,因此它导致错误是有意义的。但更重要的是,在 return 语句之后有代码,这将导致无法到达的代码错误。

Println (“本周经理人选择”+ anyItem + “我们向您推荐”) ;

您还没有初始化甚至声明变量 anyItem。

这个代码: + anyItem +

表示获取 ObjectanyItem 的 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);

}

btw: in Java its convetion to place the curly parenthesis on the same line as the declaration of the function.

解决方案是不好的,即使你固定你的命名和无法到达的声明,打印出来。

你也应该注意的事情 1.随机种子,和大数据,将项目的数字是如此大的返回数字的随机 < itemlist.size ()。

  1. you didn't handle multithread, you might get index out of bound exception

我看到密码了
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
联系不上。

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

就是这样,使用 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);
}

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