有没有一种方法可以通过键从哈希映射中随机选择值?

9 浏览
0 Comments

有没有一种方法可以通过键从哈希映射中随机选择值?

假设我有两个ImageButtons,一个HashMap和在drawable(资源文件)中放置的图片,这些图片作为值存储在HashMap中。

我需要使用Randomizer随机选择HashMap中的一个值,并将这个值(即图片)分配给ImageButton作为其背景。

例如,如果点击第一个按钮,第二个按钮的背景将会随机更改。

以下是我已经有的代码:

public class MainActivity extends Activity {
  final Resources res = getResources();
  final Random random = new Random();
  final ImageButton imgButt1 = (ImageButton) findViewById(R.id.imageButton1);
  final ImageButton imgButt2 = (ImageButton) findViewById(R.id.imageButton2);
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Drawable coub1 = res.getDrawable(R.drawable.coub1);
    Drawable coub2 = res.getDrawable(R.drawable.coub2);
    Drawable coub3 = res.getDrawable(R.drawable.coub3);
    Drawable coub4 = res.getDrawable(R.drawable.coub4);
    Drawable coub5 = res.getDrawable(R.drawable.coub5);
    Drawable coub6 = res.getDrawable(R.drawable.coub6);
    Drawable coub7 = res.getDrawable(R.drawable.coub7);
    Drawable coub8 = res.getDrawable(R.drawable.coub8);
    Drawable coub9 = res.getDrawable(R.drawable.coub9);
    Drawable coub10 = res.getDrawable(R.drawable.coub10);
    final Map someHashMap = new HashMap();
    someHashMap.put(1, coub1);
    someHashMap.put(2, coub2);
    someHashMap.put(3, coub3);
    someHashMap.put(4, coub4);
    someHashMap.put(5, coub5);
    someHashMap.put(6, coub6);
    someHashMap.put(7, coub7);
    someHashMap.put(8, coub8);
    someHashMap.put(9, coub9);
    someHashMap.put(10, coub1);
    imgButt1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Object[] values = someHashMap.values().toArray();
            Object randomValue = values[random.nextInt(values.length)];
            int drawableID = values.;
            imgButt2.setBackgroundResource(drawableID);
        }
    });
    imgButt2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Object[] values = someHashMap.values().toArray();
            Object randomValue = values[random.nextInt(values.length)];
            int drawableID = myImages.getResourceId(randomInt, -1);
            imgButt1.setBackgroundResource(drawableID);
        }
    });
  }
}

0
0 Comments

有时候我们需要从一个HashMap中随机选择一个值,但是HashMap没有提供直接的方法来实现这个功能。在这种情况下,可以考虑使用其他方法来解决这个问题。

一种解决方法是完全放弃HashMap,而是使用一个int类型的数组来存储值。我们可以将要选择的值存储在数组中,并使用随机数来选择数组中的一个索引,然后获取对应的值。以下是一个示例代码:

int[] ids = {R.drawable.coub1, R.drawable.coub2, R.drawable.coub3, R.drawable.coub4, 
             R.drawable.coub5, R.drawable.coub6, R.drawable.coub7, R.drawable.coub8, 
             R.drawable.coub9, R.drawable.coub10};
// 当需要随机选择一个Drawable时
Drawable drawable = res.getDrawable(ids[random.nextInt(ids.length)]);

这段代码先创建了一个包含要选择的值的int数组ids。然后,使用Random类生成一个随机数,该随机数的范围为数组的长度。最后,通过使用随机数作为索引来获取数组中的值,从而实现了从HashMap中随机选择值的功能。

通过使用这种方法,我们可以绕过HashMap,直接从数组中选择随机值。这种方法更加简单和高效,特别适用于需要大量随机选择值的情况。

0
0 Comments

有时候我们需要从HashMap中随机选择一个键值对,但是HashMap并没有提供直接的方法来实现这个功能。但是我们可以通过将所有的键放入一个列表或者数组中,然后随机选择一个索引来实现随机选择键的功能。

以下是一种实现方式:

List keys = new ArrayList(someHashMap.keySet());
Integer randomKey = keys.get(random.nextInt(keys.size()));
Object randomValue = someHashMap.get(randomKey);

上述代码中,首先创建一个ArrayList来存储HashMap中的所有键,然后通过随机生成一个索引来从列表中选择一个键,最后通过该键获取对应的值。

然而,上述代码中使用了HashMap的`keys()`方法来获取所有的键,但是实际上HashMap并没有提供`keys()`方法。这是因为在Java中,HashMap的键是唯一的,并且我们可以通过`keySet()`方法获取所有的键。

因此,我们可以将上述代码修改为:

List keys = new ArrayList(someHashMap.keySet());
Integer randomKey = keys.get(random.nextInt(keys.size()));
Object randomValue = someHashMap.get(randomKey);

这样就可以实现从HashMap中随机选择一个键值对的需求了。

0