Почему Processing думает, что я передаю int в функцию color () в конце этого кода? - PullRequest
1 голос
/ 16 марта 2011

Предисловие: я работаю с Processing и никогда не использовал Java.

У меня есть эта функция обработки, предназначенная для поиска и возврата наиболее распространенного цвета среди пикселей текущего изображения, над которым я работаю. последняя строка жалуется, что «метод color (int) в типе PApplet не применим для аргументов (String)». Что случилось?

   color getModeColor() {
     HashMap colors = new HashMap();
     loadPixels();
     for (int i=0; i < pixels.length; i++) {
       if (colors.containsKey(hex(pixels[i]))) {
         colors.put(hex(pixels[i]), (Integer)colors.get(hex(pixels[i])) + 1);
       } else {
         colors.put(hex(pixels[i]),1);
       }
     }

     String highColor;
     int highColorCount = 0;

     Iterator i = colors.entrySet().iterator();
     while (i.hasNext()) {
       Map.Entry me = (Map.Entry)i.next();
       if ((Integer)me.getValue() > highColorCount) {
         highColorCount = (Integer)me.getValue();
         highColor = (String)me.getKey();
       }
     } 
     return color((highColor);
   }

Обработка документов , на которые я смотрю, довольно редка в HashMap, поэтому я не совсем уверен, что происходит внутри нее, но я увеличивал то, что там доступно, с помощью Документы Java они указывают. Но я на самом деле не зацикливаюсь на том, что происходит с типами. Похоже, ключ в HashMap должен быть строкой, а значение должно быть целым числом, но они выглядят как объекты, которые я должен привести к использованию перед использованием. Так что я не уверен, что это вызывает этот глюк.

Или, может быть, есть только проблема с цветом (), но документы говорят, что он примет шестнадцатеричное значение, которое я и пытался использовать в качестве ключа в HashMap (где я скорее просто используйте сам цвет).

Теперь, когда я говорил об этом, я думаю, что функция color () видит шестнадцатеричное значение как int, но функция hex () преобразует цвет в строку. И я не могу преобразовать эту строку в int. Я думаю, что я мог бы разобрать подстроки и восстановить цвет, но должен быть какой-то более элегантный способ сделать это, которого мне не хватает. Должен ли я просто создать класс ключ-значение-пара, который будет содержать цвет и число, и использовать их массив?

Заранее благодарим за любую помощь или предложения, которые вы можете предоставить!

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Я не понял этого, но я все обошел. Я просто делаю свою собственную строку из цветовых компонентов, таких как:

 colors.put(red(pixels[i]) + "," + green(pixels[i]) + "," + blue(pixels[i]),1)

и затем позволяем функции выпустить цвет следующим образом:

     String[] colorConstituents = split(highColor, ",");
     return color(int(colorConstituents[0]), int(colorConstituents[1]), int(colorConstituents[2]));

Это не кажется лучшим способом справиться с этим - если я возиться с этим долгосрочным периодом, я думаю, я изменю его на использование массива объектов, которые содержат цвет и количество, но работает на данный момент.

0 голосов
/ 16 марта 2011

Я углублюсь в это, но вначале мы думаем о том, чтобы использовать дженерики Java, чтобы компилятор жаловался на проблемы с типами (и вы не получите ошибок времени выполнения):

HashMap<String,Integer> colors = new HashMap<String,Integer>();

Таким образом, компилятор будет знать, что ключи - это строки, а элементы - целые числа. Таким образом, кастинг не понадобится.

...