Java 将任何类型的ArrayList传递给方法
我正在开发我的第一款Android应用程序,这是我孩子的一款数学游戏,我正在学习Java。我有两个Java 将任何类型的ArrayList传递给方法,java,android,generics,Java,Android,Generics,我正在开发我的第一款Android应用程序,这是我孩子的一款数学游戏,我正在学习Java。我有两个ArrayLists,一个整数0..9和一个可能的操作字符串,目前,只有+和- 我想编写一个方法,将随机索引返回到ArrayList,以便选择随机元素。我遇到的是,我需要两种方法,一种用于ArrayList的每种类型,即使代码是相同的。有没有一种方法可以做到这一点 我现在用的是: Random randomGenerator = new Random(); . . . n = randomI
ArrayList
s,一个整数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;
}
Random Random generator=new Random();
. . .
n=随机指标(可能的指标);
int op1=possiblePerands.get(n);
n=随机指标(可能的指标);
int op2=possiblePerands.get(n);
n=随机指数xstr(可能的操作);
字符串操作=possibleOperations.get(n);
. . .
int randomIndexInt(数组列表a){
int n=randomGenerator.nextInt(a.size());
返回n;
}
int randomIndexStr(ArrayList a){
int n=randomGenerator.nextInt(a.size());
返回n;
}
我想做的是将
randomIndexInt
和randomIndexStr
折叠成一个方法。您只需要数组的大小,对吗?
那么就这样做吧:
int randomIndex(int size){
int n = randomGenerator.nextInt(size);
return n;
}
将您的方法声明为
int randomIndexInt(ArrayList a)
只需执行以下操作:
private int randomIndex(int size){
return randomGenerator(size);
}
然后用
randomIndex(yourArray.size())调用它们代码>使用此代码,您可以传递任何类型的列表
int randomIndex(List<?> list){
int n = randomGenerator.nextInt(list.size());
return n;
}
int随机索引(列表){
int n=randomGenerator.nextInt(list.size());
返回n;
}
int randomIndex1(数组列表a)
{
int n=randomGenerator.nextInt(a.size());
返回n;
}
int randomIndex2(int大小)
{
int n=随机生成器.nextInt(大小);
返回n;
}
您可以按如下方式使用泛型
声明你的函数如下
private <T> int randomIndex(ArrayList<T> a){
int n = randomGenerator.nextInt(a.size());
return n;
}
private int randomIndex(ArrayList a){
int n=randomGenerator.nextInt(a.size());
返回n;
}
现在,您可以将ArrayList
或ArrayList
传递到此函数,而不会出现类似这样的问题
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));
ArrayList strList=new ArrayList();
strList.add(“on1”);
System.out.println(随机索引(strList));
ArrayList intList=新的ArrayList();
增加(1);
System.out.println(随机索引(intList));
在方法签名中使用列表
比使用数组列表
更通用
int your_method(List<?> a){
//your code
}
int您的_方法(列表a){
//你的代码
}
您可以编写一个方法,该方法将a(类型为int
)作为参数,返回0和a之间的任意随机数,并调用此方法传递数组列表大小。请记住接受答案,如果您喜欢其他人,也可以使用+1:)+1为您的孩子编写数学游戏。谢谢大家,在这里得到的帮助下,我能够进一步改进该方法,我的代码现在看起来是这样的:int op1=(Integer)getRandomElement(possiblePerands);int op2=(整数)getRandomElement(可能是perands);字符串操作=(字符串)getRandomElement(可能的操作)。Object getRandomElement(ArrayList a){int n=randomGenerator.nextInt(a.size());返回a.get(n);}抱歉,我无法正确格式化此评论。谢谢;这在数组中运行正常,但int数组将其限制为基本类型。我想我可以使用Integer而不是int,但是这种方法很好地解决了这个问题。你不能将列表
或列表
传递到这个方法中。Ups,我忘记了泛型转换。谢谢@PaulBellora。谢谢。这是另一种方法,也是我之前做过的一种方法,但实际上我想将尽可能多的通用代码(包括获取数组大小)放入该方法中。它可以是Collection
,因为这就是声明size()
。
int your_method(List<?> a){
//your code
}