我正在开发我的第一个Android应用程序,一个适合我孩子的数学游戏,并且正在学习Java。我有两个ArrayList
,一个整数0..9
和一个可能的操作字符串,目前只有+
和-
。
我想编写一个方法,将随机索引返回到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;
}
我想要做的是将randomIndexInt
和randomIndexStr
折叠为一种方法。
答案 0 :(得分:17)
将您的方法声明为int randomIndexInt(ArrayList<?> a)
答案 1 :(得分:7)
你只需要数组的大小吗? 这样做:
int randomIndex(int size){
int n = randomGenerator.nextInt(size);
return n;
}
答案 2 :(得分:5)
使用此代码,您可以传递任何类型的列表
int randomIndex(List<?> list){
int n = randomGenerator.nextInt(list.size());
return n;
}
答案 3 :(得分:2)
就这样做:
private int randomIndex(int size){
return randomGenerator(size);
}
然后使用randomIndex(yourArray.size());
答案 4 :(得分:2)
更通用的是在方法签名中使用List
而不是ArrayList
。
int your_method(List<?> a){
//your code
}
答案 5 :(得分: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));
答案 6 :(得分:0)
int randomIndex1(ArrayList<?> a)
{
int n = randomGenerator.nextInt(a.size());
return n;
}
int randomIndex2(int size)
{
int n = randomGenerator.nextInt(size);
return n;
}