如何在Java中获取数组第一个值和最后一个值之间的元素索引
我正在开发一个程序,在这个程序中,我将一种颜色与数组中的其他颜色进行比较。我使用欧几里德颜色距离公式()来确定两种颜色之间的颜色距离,但我要做的是得到第二个、第三个和第四个最小值索引,这样我就可以将这些索引的值分配给要比较的值。这是我试过的如何在Java中获取数组第一个值和最后一个值之间的元素索引,java,arrays,Java,Arrays,我正在开发一个程序,在这个程序中,我将一种颜色与数组中的其他颜色进行比较。我使用欧几里德颜色距离公式()来确定两种颜色之间的颜色距离,但我要做的是得到第二个、第三个和第四个最小值索引,这样我就可以将这些索引的值分配给要比较的值。这是我试过的 private void findUnknownColors(Color[] firstAnchor, Color[] foundAnchor){ //Find distance between each color in first anchor
private void findUnknownColors(Color[] firstAnchor, Color[] foundAnchor){
//Find distance between each color in first anchor and color arr
double[] storeClosestColors = new double [24];
//fill the array with a random value.
Arrays.fill(storeClosestColors, 5000);
for(int i = 0; i < colorArray.length; i++){
storeClosestColors[i] = colorDistance(firstAnchor[0], colorArray[i]);
if(i < storeClosestColors[2]){
storeClosestColors[2] = i;
}
}
//get 3 closest colors disregarding 0.0
System.out.println("Closest colors: " + Arrays.toString(storeClosestColors));
}
这是输出
Color array: [java.awt.Color[r=171,g=162,b=184], java.awt.Color[r=103,g=7,b=10], java.awt.Color[r=183,g=60,b=67], java.awt.Color[r=111,g=20,b=37], java.awt.Color[r=0,g=4,b=45], java.awt.Color[r=72,g=127,b=57], java.awt.Color[r=171,g=172,b=199], java.awt.Color[r=83,g=146,b=89], java.awt.Color[r=146,g=171,b=62], java.awt.Color[r=0,g=3,b=30], java.awt.Color[r=165,g=61,b=49], java.awt.Color[r=140,g=181,b=78], java.awt.Color[r=155,g=22,b=22], java.awt.Color[r=170,g=151,b=64], java.awt.Color[r=5,g=10,b=64], java.awt.Color[r=155,g=147,b=173], java.awt.Color[r=34,g=131,b=51], java.awt.Color[r=140,g=165,b=51], java.awt.Color[r=1,g=15,b=63], java.awt.Color[r=30,g=139,b=64], java.awt.Color[r=178,g=168,b=188], java.awt.Color[r=170,g=36,b=33], java.awt.Color[r=113,g=26,b=46], java.awt.Color[r=112,g=25,b=44]]
Closest colors: [271.20551190471775, 188.49519224638064, 0.0, 148.0690295098877, 304.4738994868854, 221.26990553111827, 301.1983358187757, 236.5966372330765, 230.12584023475068, 309.0199161765306, 40.283177320067495, 252.41092952514953, 112.21335008589664, 183.30020415632384, 291.59154464121553, 242.0912147311422, 273.11361532336684, 222.63613286313162, 293.7586168948921, 285.47859349476624, 283.3636066853858, 73.66764469561926, 135.36298134552888, 138.41173575152507]
我想我可以给你一些建议,告诉你如何做你想做的事(根据我的理解)
- 从颜色
(*)计算C
的每种颜色的colorArray
,将每种颜色的距离按与colordance
的颜色相同的顺序存储。让我们将数组命名为colorArray
。所以,colordances
colordances[i]=colorArray[i]和C之间的距离
- 复制
数组。让我们命名数组颜色距离
colordancescope
- 在
。进行排序时,跟踪每个步骤(**)中彩色测距镜上执行
元素的索引变化colordancescope
- 如果上一步操作正确,则在该步骤结束时,您应该按排序顺序使用
,以及未排序的colordancescope
数组中每个元素的顺序。根据这些信息,您可以很容易地从颜色colordances
中确定C
的第二、第三、第四最近颜色colorArray
C
的值将来自一个数组(firstAnchor
)。在这种情况下,如果必须使用firstAnchor
的所有值,则必须重复执行该过程
(**):为了方便地跟踪每个步骤中的索引更改,您将需要两个额外的数组-一个将存储未排序数组中已排序元素的位置,另一个将存储未排序元素的顺序。能否显示colorArray。确定我将添加它@Omoreupdated my post@OmoreTake数组的大小,除以一个元素的大小。这将为您提供元素的数量。除以2。这是中间的索引,我并不想要中间的索引,我想要第二、第三和第四个最小的双值索引,正如我在问题中所说的@维多维斯特罗米想出了解决问题的办法。我没有发布项目中的所有内容,但是你说的很多内容我已经实现了。这对你有好处。
Color array: [java.awt.Color[r=171,g=162,b=184], java.awt.Color[r=103,g=7,b=10], java.awt.Color[r=183,g=60,b=67], java.awt.Color[r=111,g=20,b=37], java.awt.Color[r=0,g=4,b=45], java.awt.Color[r=72,g=127,b=57], java.awt.Color[r=171,g=172,b=199], java.awt.Color[r=83,g=146,b=89], java.awt.Color[r=146,g=171,b=62], java.awt.Color[r=0,g=3,b=30], java.awt.Color[r=165,g=61,b=49], java.awt.Color[r=140,g=181,b=78], java.awt.Color[r=155,g=22,b=22], java.awt.Color[r=170,g=151,b=64], java.awt.Color[r=5,g=10,b=64], java.awt.Color[r=155,g=147,b=173], java.awt.Color[r=34,g=131,b=51], java.awt.Color[r=140,g=165,b=51], java.awt.Color[r=1,g=15,b=63], java.awt.Color[r=30,g=139,b=64], java.awt.Color[r=178,g=168,b=188], java.awt.Color[r=170,g=36,b=33], java.awt.Color[r=113,g=26,b=46], java.awt.Color[r=112,g=25,b=44]]
Closest colors: [271.20551190471775, 188.49519224638064, 0.0, 148.0690295098877, 304.4738994868854, 221.26990553111827, 301.1983358187757, 236.5966372330765, 230.12584023475068, 309.0199161765306, 40.283177320067495, 252.41092952514953, 112.21335008589664, 183.30020415632384, 291.59154464121553, 242.0912147311422, 273.11361532336684, 222.63613286313162, 293.7586168948921, 285.47859349476624, 283.3636066853858, 73.66764469561926, 135.36298134552888, 138.41173575152507]