2016-05-04 14 views
0

両方の乱数ジェネレータを参照すると、下の両方のパブリッククラスで同じrandomNumberを使用するにはどうすればよいですか。私は両方のために同じ乱数を使用する必要があります。2つのクラスで使用されるAndroidの乱数ジェネレータ

瞬間、彼らは両方の仕事で

、彼らは異なる乱数

任意のアイデアを取得しているようなテキストは画像と一致していませんか?

public String getItem() { 
    // Set vars 
    String item = ""; 

    Random randomGen = new Random(); 
    int randomNumber = randomGen.nextInt(mitems.length); 

    item = mitems[randomNumber]; 

    return item; 

} 

public int getImg() { 
    // Set vars 
    int pic; 

    Random randomGen = new Random(); 
    int randomNumber = randomGen.nextInt(mitems.length); 

    pic = mPics[randomNumber]; 

    return pic; 

} 

これは...それらがアクセスされている方法

View.OnClickListener listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String item = mItemBook.getItem(); 
      int pic = mItemBook.getImg(); 

      // Update text view with item 
      mInfoText.setText(item); 
      mImage.setImageResource(pic); 
} 

答えて

1

シンプルです。乱数を2回生成しないでください。一度だけ、それを生成し、getImggetItemに渡し、そこにどのように多くの項目を知るためのヘルパーメソッドの追加:

public int numItems() { return mitems.length; } 

public String getItem(int id) { 

    return mitems[id]; 

} 

public int getImg(int id) { 

    return pic = mPics[id]; 

} 

あなたのonClickは今だけのアイテムの数を取得し、ランダムに1を選ぶことができます。

@Override 
    public void onClick(View v) { 
     Random r = new Random(); 
     int id = r.nextInt(mItemBook.numItems()); 
     String item = mItemBook.getItem(id); 
     int pic = mItemBook.getImg(id); 

     // Update text view with item 
     mInfoText.setText(item); 
     mImage.setImageResource(pic); 

そのため、Randomのインスタンスを構築しないでください。 1つを構築し、それをフィールドに保存します。多くの場合、オブジェクトを再利用できるときに不必要にオブジェクトを構築すると、パフォーマンスやメモリの問題が発生する可能性があるため、より良い方法です。 onClickメソッドではそうではないかもしれませんが、後からではなく良い習慣を持つ方がよいでしょう。

+0

どうすればいいのか教えてください。 – CarlRyds

+0

@CarlR完全な答えを更新しました。 – hexafraction

+0

ありがとうございました。 – CarlRyds

関連する問題