Java Hashmap使用随机返回给定键的值

时间:2011-04-04 22:47:07

标签: java random key hashmap

关于让我的程序运行,我有点问题。我创建了一个具有设置的hashmap,并且hashmap可以容纳4个键/值对。

现在每个键(0,1,2,3)都附加到一个表示颜色的字符串'value'(“white”,“red”......等)。

现在我使用随机给我一个从0到3的随机数,我将其分配给一个int变量。

然后我使用这个变量来查看集合是否包含这个int键(它会)然后我想将与该键相关的值分配给一个String变量,然后我将在一个方法中使用它来更改GUI面板的颜色(触发事件时生成随机颜色)。

// changing yellow with the String variable representing the value 
// from the hashmap found by matching the key with the random int.
centerPanel.setBackground(Color.yellow);  

有人可以帮帮我吗?现在已经快到12点了,早上可能已经知道了,但我有心灵空白!!

4 个答案:

答案 0 :(得分:4)

在我看来,这是一个从0到3索引的数组Color [4] - 而不是将random int更改为String或Integer键并进行哈希查找。


完全虚假的类,显示如何使用随机

的数组
public class foo
{
    private Color[] colors = { Color.red, Color.green, Color.blue, Color.yellow };

    public Color getColor()
    {
        return colors[getRandom(0, 3)];
    }

    private int getRandom(int min, int max)
    {
        return 2;
    }

    enum Color {
        red, green, blue, yellow;
    }
}

答案 1 :(得分:3)

改为使用数组:

String[] colors = new String[]{"white", "red"... etc};
int random = random.nextInt(colors.length);

String randomColor = colors[random];

编辑:如果需要,替换Color类(或基元)的String。

答案 2 :(得分:2)

您需要一种将String转换为实际颜色的方法。我会用这样的东西:

public static Color stringToColor(final String value) {
    if (value == null) {
      return Color.black;
    }
    try {
      // get color by hex or octal value
      return Color.decode(value);
    } catch (NumberFormatException nfe) {
      // if we can't decode lets try to get it by name
      try {
        // try to get a color by name using reflection
        final Field f = Color.class.getField(value);

        return (Color) f.get(null);
      } catch (Exception ce) {
        // if we can't get any color return black
        return Color.black;
      }
    }
  }

(来自2D-Graphics / Convertsagivenstringintoacolor.htm“> http://www.java2s.com/Tutorial/Java/0261_2D-Graphics/Convertsagivenstringintoacolor.htm)

答案 3 :(得分:0)

对于任何对我如何解决这个问题感兴趣的人(感谢其他人的帮助和谷歌的教程):

    // fields
    private Color1[] colors = { Color1.red, Color1.green, Color1.blue, Color1.yellow };
    private int a2;
    private String getRandomColor;

    //constructor calling methods to generate a random value to 'a2' (0 to 3) and then setting variable a2 to the color as a string

    public SamTester()
    {
        setA2();
    }

    public void setA2()
    {
        a2 = (int)(Math.random()*4);
        getRandomColor = getColor().toString();
    }

    public Color1 getColor()
    {
       return colors[a2];
    }
________________________________________________________________________

        //inner class  
      class LeftClicked implements ActionListener
      {
          public void actionPerformed(ActionEvent e)
           {
               if(getRandomColor == "red")
               {
                   centerPanel.setBackground(Color.red);
               }
               else if (getRandomColor == "blue")
               {
                   centerPanel.setBackground(Color.blue);
               }
               else if (getRandomColor == "green")
               {
                   centerPanel.setBackground(Color.green);
               }
               else
               {
                   centerPanel.setBackground(Color.yellow);
               }
               setA2();
         }
        }

________________________________________________________________________

//basic enums class to represent the constant colors.

    public enum Color1
   {
    red, green, blue, yellow;
   }

干杯!