Если вам нужен List
цветов для индекса можно использовать Map
:
private Map<Integer, List<Color>> bin = new HashMap<Integer, List<Color>>();
int idx = 16* (tmpColor.getRed()/64) + 4*(tmpColor.getGreen()/64) + (tmpColor.getBlue()/64);
if(bin.get(idx)==null) bin.put(idx, new ArrayList<Color>());
bin.get(idx).add(tmpColor); //This should be exactly what you need
Вы также можете использовать различные структуры, как List<List<Color>>
или List<Color>[]
. Каждая структура реле на List
с List
может быть обновлена и создана без знания начальной длины.
Что я хотел бы сделать, это создать отдельный класс для цвета бункера и некоторые полезные методы в:
public class Bin{
private List<Color> colors = new ArrayList<Color>();
public void addColor(Color col){
this.colors.add(col);
}
public List<Color> getColors(){
return this.colors;
}
public boolean hasColor(Color col){
return colors.contains(col);
}
//and so on...
}
И лучшую структуру для вашей цели сейчас карта с отложенной инициализацией:
private Map<Integer, Bin> myBinsOfColors = new HashMap<Integer, Bin>();
int idx = 16* (tmpColor.getRed()/64) + 4*(tmpColor.getGreen()/64) + (tmpColor.getBlue()/64);
if(myBinsOfColors.get(idx)==null) myBinsOfColors.put(idx, new Bin()); //Lazy
myBinsOfColors.get(idx).addColor(tmpColor); //This should be exactly what you need
Для получения информации о количестве и количестве цветов вы можете использовать два метода в классе Bin
:
public class Bin{
private List<Color> colors = new ArrayList<Color>();
//As above.
public Color calculateAverage() {
Integer red = 0;
Integer blue = 0;
Integer green = 0;
if(!colors.isEmpty()) {
for (Color col : colors) {
red+= col.getRed();
green+= col.getGreen();
blue+= col.getBlue();
}
return new Color(red/colors.size(), green/colors.size(), blue/colors.size());
}
return null;
}
public int getColorCount(){
return this.colors.size();
}
//and so on...
}
отклик «кажется, не работает» крайне расплывчатым. Вы получили сообщение об ошибке? Если да, опубликуйте его. Вы получаете исключение? Если вы это сделаете, разместите трассировку стека. Может ли 'idx' превышать 64? В вашем коде есть некоторые ошибки, но я хотел бы помочь вам выследить их, а не просто дать вам ответ. –
max idx is 16 * 3 + 4 * 3 + 3 = 63 - все в порядке. – iced
Это ошибка, которую я получаю'Cannot invoke push (Цвет) для типа массива Color [] 'idx can not превышает 64 – user3540466