我尝试创建一个计算图像直方图的程序。我有上面的代码,但我无法弄清楚它为什么不起作用。
public void hist(List<Integer> r, List g, List b){
int count[] = new int [256];
int rSize = r.size();
int gSize = g.size();
int bSize = b.size();
for (int j = 0; j<=255; j++){
for(int i = 0; i < rSize; i++){
if( r.get(i) == j ){}
//System.out.println(r.get(i) == j);
count[j]++;
}
}
for (int i = 0; i < count.length; i++) {
System.out.print(count[i]);
}
}
如果我在main中调用它,则count的每个元素都是rSize,这是不可能的,因为r list具有图像的Red channel值。
答案 0 :(得分:4)
您的if
为空:if( r.get(i) == j ){}
。
应该是:
if( r.get(i) == j )
{
count[j]++;
}
可能希望下次使用调试器,只需单步执行代码,就可以轻松捕获。
答案 1 :(得分:1)
要在先前的答案中添加if为空(在IDE中自动格式化会显示缩进不正确)。
但是,不需要嵌套循环。如果r可以有任何整数或null,那么你可以:
for (Integer integer: r){
if (integer != null) {
int i = integer;
if(i >= 0 && i<= 255) {
count[i]++;
}
}
}
并假设r只包含适合计数的整数,那么你可以拥有
for (int i: r){
count[i]++;
}