2017-04-04 288 views
1

我正在编写一个程序,在该程序中,我通过图像确定该图像中存在的平均红色通道,绿色通道和蓝色通道。我将这些平均值作为参数传递给新的颜色。然后我想将这种颜色添加到数组中。我重复这个过程24次。我面临的问题是,当我得到一种新颜色并将其添加到阵列中时,以前的颜色会被擦除。我想保留数组中现有的颜色并添加到尚未填充的颜色中。这是我尝试过的。将颜色添加到颜色数组

System.out.println("R: "+ rAvg); 
System.out.println("G: "+ gAvg); 
System.out.println("B: "+ bAvg); 


Color newColor = new Color(rAvg, gAvg, bAvg); 
Color[] ColorArr = new Color[24]; 

for(int i = 0; i < ColorArr.length; i++){ 
    ColorArr[i] = newColor; 
     } 

System.out.println(Arrays.toString(ColorArr)); 

这里是输出后一种颜色被添加到阵列

R: 206 
G: 0 
B: 0 
[java.awt.Color[r=206,g=0,b=0],java.awt.Color[r=206,g=0,b=0] 

这里是阵列后我添加一个新的颜色。

R: 211 
G: 178 
B: 230 
[java.awt.Color[r=211,g=178,b=230], java.awt.Color[r=211,g=178,b=230] 

最后一种颜色被覆盖,并被替换为新颜色,而不是进入下一个索引并保留最后一个。我该如何解决这个问题,以便将输入的颜色保存在数组中,并将新颜色放置在之前的索引之后?

+2

'for-loop'用新的'Color'替换数组中的每个元素。你必须在你的程序的某个地方存储一个计数器,并为24次迭代中的每一次递增。 –

+0

您的数组包含24个元素,它如何仅打印2个元素?我不明白 – developer

+0

我没有展示整个事情,因为它很长,但它是有24次的重复。 @javaguy – cuber

回答

3

你可以调整你的代码是这样的:

private Color[] colorArray = new Color[24]; 
private int currentIndex = 0; 

public void addColorToArray(int red, int green, int blue) { 
    colorArray[currentIndex++] = new Color(red, green, blue); 
} 

public void myMethodThatDoThis24Times() { 
    addColorToArray(getRedAverage(), getGreenAverage(), getBlueAverage()); 
    addColorToArray(getRedAverage(), getGreenAverage(), getBlueAverage()); 
    ... 
} 
+0

你的逻辑看起来比我的好。我必须从你那里学到很少的东西。感谢和upvote :) –

+0

我看着这只是万一你想知道,我正在努力使它与我的代码一起工作。 – cuber

+0

您可以在http://ideone.com/上发布您的完整代码,并将链接粘贴到此处。 –

1

你的逻辑看起来是正确的。唯一需要注意的是每次创建一个新的颜色对象实例。

//ColorArr[i] = newColor;     // Instead of this 
ColorArr[i] = new Color(rAvg, gAvg, bAvg); // Do this for each element in array 

你最初做Color newColor = new Color(rAvg, gAvg, bAvg);和相同newColor实例分配给在ColorArr所有元素。

因此,newColor实例中的单个更改反映了数组中所有引用元素的更改。

作为@user alayor,正确地建议使用不同的RGB值创建Color(rAvg,gAvg,bAvg)的新实例。

+0

这个替换了整个数组,之前的条目被覆盖。 – cuber

+0

@cuber,我希望我的解决方案能帮助你。我会很感激,如果你可以upvote我的代码:)谢谢 –

+0

它也帮助了我也开始看到我的缺陷是在哪里。 @Devendra Lattu – cuber