Java Hashmap, возвращающий значение из заданного ключа, используя случайный - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть небольшая проблема с тем, чтобы заставить мою программу работать.Я создал hashmap с настройкой, и hashmap может содержать 4 пары ключ / значение.

Теперь каждый ключ (0,1,2,3) присоединен к String 'value', который представляет цвет(«белый», «красный» ... и т. д.)

Теперь я использую случайное число, чтобы дать мне случайное число от 0 до 3, которому я назначаю переменную типа int.

Затем я использую эту переменную, чтобы увидеть, содержит ли коллекция этот ключ int (что она и будет), а затем я хотел присвоить это значение, связанное с этим ключом, переменной String, которую я затем буду использовать в методе для изменения цветаПанель графического интерфейса (генерирование случайного цвета при срабатывании события).

// 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 ]

4 голосов
/ 05 апреля 2011

Мне кажется, это просьба к массиву Color [4] с индексом от 0 до 3 - вместо того, чтобы менять случайное значение int на ключ String или Integer и выполнять поиск в Hash.


Совершенно фальшивый класс, который показывает, как использовать массив с вашим случайным

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;
    }
}
3 голосов
/ 05 апреля 2011

Вместо этого используйте массив:

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

String randomColor = colors[random];

Редактировать: Заменить String на свой класс Color (или примитив), если хотите.

2 голосов
/ 05 апреля 2011

Вам нужен метод, который преобразует строку в фактический цвет. Я бы использовал что-то вроде этого:

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)

0 голосов
/ 05 апреля 2011

Для всех, кто интересуется, как я решил эту проблему (благодаря помощи других здесь и учебники на Google):

    // 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;
   }

Ура всем!

...