Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将任何类型的ArrayList传递给方法_Java_Android_Generics - Fatal编程技术网

Java 将任何类型的ArrayList传递给方法

Java 将任何类型的ArrayList传递给方法,java,android,generics,Java,Android,Generics,我正在开发我的第一款Android应用程序,这是我孩子的一款数学游戏,我正在学习Java。我有两个ArrayLists,一个整数0..9和一个可能的操作字符串,目前,只有+和- 我想编写一个方法,将随机索引返回到ArrayList,以便选择随机元素。我遇到的是,我需要两种方法,一种用于ArrayList的每种类型,即使代码是相同的。有没有一种方法可以做到这一点 我现在用的是: Random randomGenerator = new Random(); . . . n = randomI

我正在开发我的第一款Android应用程序,这是我孩子的一款数学游戏,我正在学习Java。我有两个
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
}