2012-07-31 90 views
6

我正在开发我的第一个Android应用程序,为我的孩子开发的数学游戏,并且正在学习Java过程。我有两个ArrayList s,其中一个整数0..9和一串可能的操作,目前只有+-将任意类型的ArrayList传递给方法

我想写一个方法,返回一个随机索引到ArrayList,所以我可以选择一个随机元素。我碰到的是,我需要两种方法,即每种类型的ArrayList,即使代码是相同的。有没有一种方法可以用一种方法做到这一点?

我现在用的是什么:

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

我希望做的是崩溃randomIndexIntrandomIndexStr成一个单一的方法。

+0

你可以写,将采取A(类型'int')作为参数,并返回0和A之间的随机数,并调用此方法传递你的数组列表大小的方法。 – 2012-07-31 07:18:30

+0

记得接受一个答案,也许+1如果你喜欢别人:) – 2012-07-31 07:43:57

+1

+1为您的孩子编写数学游戏。 – irrelephant 2012-07-31 08:47:54

回答

13

声明你的方法int randomIndexInt(ArrayList<?> a)

+0

谢谢,这工作完美。 – codingatty 2012-07-31 13:56:08

+3

它可能只是'Collection '因为这是声明'size()'。 – 2012-07-31 17:19:51

7

你只需要阵列的大小吧? 这样做:

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

谢谢。这是另一种方法,也是我之前完成的一种方法,但我实际上希望尽可能多地将通用代码(包括获取数组大小)插入方法中。 – codingatty 2012-07-31 14:46:42

2

只是使它:

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

然后用randomIndex(yourArray.size());

3

与此代码调用它们,你可以通过任何类型名单

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

谢谢;对数组工作正常,但int数组将其扼杀为原始类型。我想我可以使用Integer而不是int,但方法很好地解决了它。 – codingatty 2012-07-31 13:57:42

+0

您无法将“列表”或“列表”传递给此方法。 – 2012-07-31 17:08:58

+0

Ups,我忘记了泛型演员。谢谢@PaulBellora。 – neworld 2012-07-31 17:37:16

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

可以使用Generics如下

声明你的函数如下

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

现在你可以通过ArrayList<String>ArrayList<Integer>这个功能没有任何问题,这样

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

更通用的是使用List比方法签名中的ArrayList

int your_method(List<?> a){ 
//your code 
}