2012-07-31 8 views
6

私の最初のAndroidアプリ、私の子供のための数学ゲーム、そしてその過程でJavaを学んでいます。私は2つのArrayListを持っていて、整数のうちの1つは0..9であり、現時点では可能な操作の文字列は+-です。任意のタイプのArrayListをメソッドに渡す

ランダムなインデックスをArrayListに返すメソッドを記述したいので、ランダムな要素を選択できます。私が実行しているのは、コードが同じでも、ArrayListの各タイプに1つずつ、2つのメソッドが必要であるということです。単一の方法でこれを行う方法はありますか?私が今使っ何

:私が何をしたいのですがどのような

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

(int型の)型を引数とし、0とAの間の任意の乱数を返し、配列リストのサイズを渡してこのメ​​ソッドを呼び出すメソッドを記述できます。 –

+0

答えを受け入れることを忘れないでください。他の人が好きな人は+1してください:) –

+1

+1あなたの子供のための数学ゲームをコーディングしてください。 – irrelephant

答えて

13

はそれを作るint randomIndexInt(ArrayList<?> a)

+0

ありがとう、それは完全に働いた。 – codingatty

+3

これは 'collection 'なので、それは 'size()'を宣言しているからです。 –

7

配列のサイズだけが必要ですか? はそれを実行します。

int randomIndex(int size){ 
    int n = randomGenerator.nextInt(size); 
    return n; 
} 
+0

ありがとうございます。これはもう一つのアプローチであり、前にやったことですが、実際にはできるだけ多くの一般的なコード(配列サイズを取得することを含む)をメソッドにプッシュする必要がありました。 – codingatty

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配列はそれをプリミティブ型としてチョークします。私はintの代わりにIntegerを使うことができると思いますが、のアプローチはそれをうまく固定しました。 – codingatty

+0

このメソッドに 'List 'や 'List 'を渡すことはできません。 –

+0

アップ、私はジェネリックキャストを忘れる。ありがとう@PaulBellora。 – neworld

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

を次のようにこの関数にArrayList<String>またはArrayList<Integer>を渡すことができるようになりました

private <T> int randomIndex(ArrayList<T> a){ 
    int n = randomGenerator.nextInt(a.size()); 
    return n; 
} 

の下にあなたがこの

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

のようにすべての問題なしに、あなたの関数を宣言Genericsを使用することができますより汎用的なのは、ListよりもメソッドシグネチャのArrayList

関連する問題