Getting a random item from an ArrayList

I am learning Java and I have a problem with ArrayList and RandomGenerator .

I have an object called catalogue that has a list of arrays of objects created from another item class. I need a method in catalogue that returns all the information about one of the item objects in the list. item must be chosen arbitrarily. I used a random generator, but I can't get it to work. I can’t understand what I did wrong.

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

When I try to compile, I get an error message pointing to the line System.out.println saying "I can not find the character variable anyItem"

Any help is much appreciated :) Thanks

+65
java arraylist
Feb 17 '11 at 20:40
source share
12 answers

anyItem is a method, and the call to System.out.println is after your return statement, so it won’t compile because it is not available.

You may need to rewrite it like this:

 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; } } 
+82
Feb 17 2018-11-21T00:
source share
 public static Item getRandomChestItem() { try { return items.get((new Random()).nextInt(items.size())); } catch (Throwable e){ return null; } } 
+8
Feb 18 '16 at 2:57
source share

You should remove the system.out.println message below return , for example:

 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 basically says the function will now end. anything that is outside the scope of the return , which is also within its scope, will lead to the behavior you experienced

+4
Feb 17 '11 at 20:43
source share

your seal will appear after you return - you can never reach this statement. In addition, you never declared anyItem variable. You might want

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

The toString part is just a quickie - you might need to add a getItemDescription method that returns a useful String for this purpose ...

+3
Feb 17 2018-11-21T00:
source share

try it

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

And I highly recommend you get a book like Ivor Horton Getting Java 2

+1
Feb 17 '11 at 20:43
source share

How can i see the code
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
unattainable.

+1
Jul 23 '15 at 4:37
source share

anyItem has never been declared as a variable, so it makes sense that it causes an error. But more importantly, you have the code after the return statement, and this will lead to an unreachable code error.

0
Feb 17 '11 at 20:44
source share

System.out.println ("The choice of managers this week" + anyItem + "our recommendation to you");

You did not specify anyItem variable initialized or even declared.

This code: + anyItem +

means getting the value of the toString method of anyItem object

The second thing is why this does not work. You have a System.out.print expression after returning. A program can never reach this line.

You probably want something like:

 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 condition puts the curly bracket on the same line as the function declaration.

0
Feb 17 '11 at 20:45
source share

Here you go using 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); } 
0
Dec 21 '16 at 16:14
source share

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

Output:

2,857142857142857

2,857142857142857

8.571428571428571

+85.71428571428571

a: 2

b: 1

c: 9

d: 88

0
Apr 14 '17 at 19:56 on
source share

The solution is not very good even if you corrected your name and the unreachable wording of this listing.

things you should pay attention to 1. the seed of randomness and big data will contain many elements, the number of which is equal to the number of random <itemlist.size ().

  • you did not handle multithreading, you could get an index from a related exception
-one
Apr 08 '13 at 6:06 on
source share

Here is the best way to do things:

 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()); } } } 
-2
Oct 31 '17 at 4:46 on
source share



All Articles