Recuperando un elemento aleatorio de ArrayList

Estoy aprendiendo Java y tengo un problema con ArrayList y RandomGenerator .

Tengo un objeto llamado catalogue que tiene una matriz de objetos creados a partir de otra clase llamada item .

Necesito un método en catalogue que devuelva toda la información en uno de los objetos de item en la lista.
El item debe ser seleccionado al azar.

 import java.util.ArrayList; import java.util.Random; public class Catalogue { private Random randomGenerator; private ArrayList catalogue; public Catalogue () { catalogue = new ArrayList(); } 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"); } 

Cuando bash comstackr, aparece un error que apunta a la línea System.out.println diciendo …

‘no se puede encontrar la variable de símbolo anyItem’

anyItem es un método y la llamada a System.out.println está después de su statement de devolución, por lo que no se comstackrá de todos modos, ya que es inalcanzable.

Puede querer volver a escribirlo como:

 import java.util.ArrayList; import java.util.Random; public class Catalogue { private Random randomGenerator; private ArrayList catalogue; public Catalogue() { catalogue = new ArrayList(); 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 items) { return items.get(new Random().nextInt(items.size())); } 

Debe eliminar el mensaje system.out.println de debajo de la return , como este:

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

la statement de return básicamente dice que la función terminará ahora. cualquier cosa incluida más allá de la statement de return que también esté dentro del scope dará como resultado el comportamiento que experimentó

su impresión llega después de su regreso; nunca puede alcanzar esa afirmación. Además, nunca declaró que anyItem sea una variable. Podrías querer

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

La parte toString es solo un rapidito; es posible que desee agregar un método ‘getItemDescription’ que devuelva una cadena útil para este fin …

Aquí tienes, usando Generics :

 private  T getRandomItem(List list) { Random random = new Random(); int listSize = list.size(); int randomIndex = random.nextInt(listSize); return list.get(randomIndex); } 

prueba esto

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

Y te sugiero que consigas un libro, como el Beginner Java 2 de Ivor Horton

anyItem nunca se ha declarado como una variable, por lo que tiene sentido que cause un error. Pero más importante aún, tiene código después de una statement de devolución y esto causará un error de código inalcanzable.

System.out.println (“Elección de administradores esta semana” + anyItem + “nuestra recomendación para usted”);

No has inicializado ni declarado la variable anyItem.

Este código: + anyItem +

significa obtener el valor del método toString de Object anyItem

La segunda cosa por la que esto no funcionará. Tiene System.out.print después de statement de devolución. El progtwig nunca podría llegar a esa línea.

Probablemente quieras algo como:

 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: en Java su convección para colocar el paréntesis rizado en la misma línea que la statement de la función.

Como puedo ver el código
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
es inalcanzable.

La solución no es buena, incluso usted ha corregido su nombre y la statement inalcanzable de esa impresión.

También debe prestar atención a las cosas: 1. Semilla de aleatoriedad, y datos grandes. El número de elemento es tan grande que devuelve el número de ese

  1. no manejaste multihilo, podrías obtener una excepción de índice fuera de límite

Ver https://gist.github.com/nathanosoares/6234e9b06608595e018ca56c7b3d5a57

 public static void main(String[] args) { RandomList 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 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())); }); } 

Salida:

2.857142857142857

2.857142857142857

8.571428571428571

85.71428571428571

a: 2

b: 1

c: 9

d: 88

Aquí hay una mejor manera de hacer las cosas:

 import java.util.ArrayList; import java.util.Random; public class facultyquotes { private ArrayList 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()); } } } 
    Intereting Posts