8

我正在为我的孩子开发我的第一个 Android 应用程序,一个数学游戏,并在此过程中学习 Java。我有两个ArrayLists,一个整数0..9和一个可能的操作字符串,目前,只是+-

我想编写一个将随机索引返回到 an 的方法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成为一个单一的方法。

4

7 回答 7

18

将您的方法声明为 int randomIndexInt(ArrayList<?> a)

于 2012-07-31T07:20:35.190 回答
7

你只需要数组的大小对吗?这样做:

int randomIndex(int size){
    int n = randomGenerator.nextInt(size);
    return n;
}
于 2012-07-31T07:19:19.567 回答
5

使用此代码,您可以传递任何类型的列表

int randomIndex(List<?> list){
    int n = randomGenerator.nextInt(list.size());
    return n;
}
于 2012-07-31T07:23:47.360 回答
2

做吧:

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

然后打电话给他们randomIndex(yourArray.size());

于 2012-07-31T07:20:38.643 回答
2

ListArrayList在方法签名中使用更通用。

int your_method(List<?> a){
//your code
}
于 2012-07-31T14:36:46.600 回答
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));
于 2012-07-31T10:27:41.983 回答
0
int randomIndex1(ArrayList<?> a)
{
   int n = randomGenerator.nextInt(a.size());
   return n;
}

int randomIndex2(int size)
{
   int n = randomGenerator.nextInt(size);
   return n;
}
于 2012-07-31T08:41:07.337 回答