2012-07-31 30 views
6

Estoy trabajando en mi primera aplicación de Android, un juego de matemáticas para mi hijo, y estoy aprendiendo Java en el proceso. Tengo dos ArrayList s, uno de los enteros 0..9 y una cadena de posibles operaciones, en este momento, solo + y -.Pasar un ArrayList de cualquier tipo a un método

Me gustaría escribir un método que devuelve un índice aleatorio en un ArrayList, por lo que puedo seleccionar un elemento aleatorio. Lo que me encuentro es que necesito dos métodos, uno para cada tipo de ArrayList, aunque el código es idéntico. ¿Hay alguna manera de hacer esto en un solo método?

Lo que yo uso ahora:

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

Lo que me gustaría hacer es el colapso randomIndexInt y randomIndexStr en un solo método.

+0

Puede escribir un método que tome A (de tipo 'int') como argumento y devuelva cualquier número aleatorio entre 0 y A, y llame a este método para pasar los tamaños de la lista de matriz. –

+0

Recuerde aceptar una respuesta, y tal vez +1 si también le agrada a otra persona :) –

+1

+1 para codificar un juego de matemáticas para su hijo. – irrelephant

Respuesta

13

declaran su método int randomIndexInt(ArrayList<?> a)

+0

Gracias, funcionó perfectamente. – codingatty

+3

Podría ser 'Colección ' ya que eso es lo que declara 'size()'. –

7

Necesita solo el tamaño de la matriz, ¿verdad? por lo hagas:

int randomIndex(int size){ 
    int n = randomGenerator.nextInt(size); 
    return n; 
} 
+0

Gracias.Ese es otro enfoque, y uno que había hecho antes, pero en realidad quería insertar el código más común posible (incluido el tamaño de la matriz) en el método. – codingatty

2

sólo lo hacen:

private int randomIndex(int size){ 
return randomGenerator(size); 
} 

Y luego llamar con randomIndex(yourArray.size());

3

con este código puede pasar cualquier tipo de la lista

int randomIndex(List<?> list){ 
    int n = randomGenerator.nextInt(list.size()); 
    return n; 
} 
+0

Gracias; eso funcionó bien con la matriz, pero la matriz int la ahoga como un tipo primitivo. Supongo que podría usar Integer en lugar de int, pero el enfoque lo solucionó bien. – codingatty

+0

No podría pasar una 'Lista ' o una 'Lista ' en este método. –

+0

Ups, me olvido de los genéricos emitidos. Gracias @PaulBellora. – neworld

0
int randomIndex1(ArrayList<?> a) 
{ 
    int n = randomGenerator.nextInt(a.size()); 
    return n; 
} 

int randomIndex2(int size) 
{ 
    int n = randomGenerator.nextInt(size); 
    return n; 
} 
1

puede utilizar Generics de la siguiente manera

declarar su función como a continuación

private <T> int randomIndex(ArrayList<T> a){ 
    int n = randomGenerator.nextInt(a.size()); 
    return n; 
} 

ahora puede pasar ArrayList<String> o ArrayList<Integer> a esta función sin ningún problema como éste

ArrayList<String> strList = new ArrayList<String>(); 
strList.add("on1"); 
System.out.println(randomIndex(strList)); 
ArrayList<Integer> intList = new ArrayList<Integer>(); 
intList.add(1); 
System.out.println(randomIndex(intList)); 
2

Más genérico es usar List que ArrayList en la firma del método.

Cuestiones relacionadas