En passant une liste de tableaux de n'importe quel type de méthode
Je travaille sur ma première application Android, un jeu de mathématiques pour mon enfant, et je suis en apprentissage de Java dans le processus. J'ai deux ArrayList
s, l'une des entiers 0..9
et l'une des chaînes d'opérations possibles, à l'heure actuelle, seulement +
et -
.
Je voudrais écrire une méthode qui retourne un hasard index dans un ArrayList
, afin que je puisse sélectionner un élément au hasard. Ce que je suis en cours d'exécution, c'est que j'ai besoin de deux méthodes, une pour chaque type de ArrayList
, même si le code est identique. Est-il un moyen de faire cela dans une seule méthode?
Ce que j'utilise maintenant:
Random randomGenerator = new Random();
. . .
n = randomIndexInt(possibleOperands);
int op1 = possibleOperands.get(n);
n = randomIndexInt(possibleOperands);
int op2 = possibleOperands.get(n);
n = randomIndexStr(possibleOperations);
String operation = possibleOperations.get(n);
. . .
int randomIndexInt(ArrayList<Integer> a){
int n = randomGenerator.nextInt(a.size());
return n;
}
int randomIndexStr(ArrayList<String> a){
int n = randomGenerator.nextInt(a.size());
return n;
}
Ce que je voudrais faire est de l'effondrement randomIndexInt
et randomIndexStr
dans une seule méthode.
- Vous pouvez écrire une méthode qui vous permettra de prendre Un (de type
int
) comme argument et de retour tout nombre aléatoire entre 0 et Une et à l'appel de cette méthode en passant votre tableau liste les tailles. - Rappelez-vous accepter une réponse, et peut-être +1 si vous aimez quelqu'un d'autre en plus 🙂
- +1 pour le codage d'un jeu de mathématiques pour votre enfant.
- Merci, tous, avec l'aide que je suis ici, j'ai été en mesure d'améliorer la méthode, et mon code ressemble maintenant à ceci: int op1 = (Integer) getRandomElement(possibleOperands); int op2 = (Integer) getRandomElement(possibleOperands); opération de Chaîne = (String) getRandomElement(possibleOperations); . . . Objet getRandomElement(ArrayList<?> a){ int n = randomGenerator.nextInt(un.size()); return un.get(n); } Excuses, je ne peux pas obtenir ce commentaire pour formater correctement.
Vous devez vous connecter pour publier un commentaire.
déclarer votre méthode
int randomIndexInt(ArrayList<?> a)
Collection<?>
puisque c'est ce que déclaresize()
.Vous avez besoin seulement de la taille de la matrice de droite?
donc, il ne:
avec ce code, vous pouvez passer n'importe quel type de liste
List<Integer>
ou unList<String>
dans cette méthode.il suffit de faire:
Et ensuite les appeler avec
randomIndex(yourArray.size());
Plus générique est d'utiliser
List
queArrayList
dans la signature de la méthode.vous pouvez utiliser
Generics
comme suitdéclarer votre fonction en tant que ci-dessous
maintenant, vous pouvez passer
ArrayList<String>
ouArrayList<Integer>
à cette fonction sans problème comme ceci