2012-07-31 95 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 
}