Java 删除二维数组中的重复项并添加相应的值

Java 删除二维数组中的重复项并添加相应的值,java,duplicates,Java,Duplicates,我知道有很多关于删除副本的事情,但我似乎做得不对,我想知道是否有人能告诉我我做错了什么。下面的代码包含一个嵌套的for循环,它遍历一个图像(由大小为256x256的矩阵组成),然后将其传递给ImagePlus以计算半径、θ和值。问题是在radius中存在重复项,我想对每个重复项的值进行如下总结: ...... r=1.44 mm/c (167), value=63 r=1.43 mm/c (167), value=77 r=1.43 mm/c (168), value=70 r

我知道有很多关于删除副本的事情,但我似乎做得不对,我想知道是否有人能告诉我我做错了什么。下面的代码包含一个嵌套的for循环,它遍历一个图像(由大小为256x256的矩阵组成),然后将其传递给ImagePlus以计算半径、θ和值。问题是在radius中存在重复项,我想对每个重复项的值进行如下总结:

......
r=1.44 mm/c (167), value=63   
r=1.43 mm/c (167), value=77   
r=1.43 mm/c (168), value=70   
r=1.42 mm/c (169), value=63   
r=1.42 mm/c (169), value=64   
r=1.41 mm/c (170), value=70   
r=1.41 mm/c (171), value=67   
r=1.40 mm/c (171), value=71 
........... 
所以应该是这样的:

r= 1.43, value=147 (70+77)

r= 1.42, value= 127 (63+64)

r= 1.41, value= 137 (70+67)
....
这是我一直在尝试的,但我没有任何运气!我也尝试过使用集合,但我需要这是在一个特定的顺序,它不能搞砸了

 final XYSeries data = new XYSeries("Third");
 double rMax = -1;
double [][] radiusArray = new double[256][256];
double [][] valueArray = new double[256][256];
 for(int i =0; i< 256; i++){
  for(int y =0; y< 256; y++){
     //image.getPixel(i, y);
       //This is taking the pixel position and calculating the r and value at that pixel
     String x = image.getLocationAsString(i, y);
    String n = image.getValueAsString(i, y);


    String delim = ", value=";
    String [] tokens = n.split(delim);
    double num = Double.parseDouble(tokens[1]);

    //if(image.getR() < 1.43){
    String [] t = x.split("r=");
    String[] b = t[1].split(" mm/c");
    //System.out.print("Meet b:    "+b[0]);
    double radius = Double.parseDouble(b[0]);

    String [] theta = x.split("theta= ");
    String [] token2 = theta[1].split(Character.toString(IJ.degreeSymbol));
    float thetaNum = Float.parseFloat(token2[0]);
    //System.out.print("  This is the theta value:    "+thetaNum+"    ");

    if(radius > rMax){
       rMax = radius;
    }

    radiusArray[i][y] = radius;
    valueArray[i][y] = num;     

    //if(thetaNum <= 180.00){
    System.out.print(x);
    System.out.print(n);
    System.out.print("   "+num);

    System.out.println();
    data.add(radius, num);

    //}
//}
}
}

尝试此方法查找dupe,注意不要在循环时删除;这将导致数组超出边界。也可以制作另一个标记为duplicate的
数组
,以添加重复项,并在找到重复项后将其删除

for(int i = 0; i < array.length; i++) {
    for(int j = 0; j < array.length; j++) {
        if(array[i] == array[j]) {
           // "i" would be a duplicate...
           break;
        }
    }
}
for(int i=0;i
这样就不会丢失数组的顺序。只需确保找到重复项,然后将其删除即可


希望这有帮助!:)

好吧,我试过了,但现在它跳过了r的每一秒。你现在可以在我更新的问题中看到。基本上,它忽略了没有重复的数字,如果我把if语句-print语句放回去,那么我会在代码中再次看到重复的数字。我不知道如何摆脱这个。
1.64   value=   186.0
1.62   value=   130.0
1.61   value=   120.0
1.59   value=   150.0
1.58   value=   134.0
1.56   value=   130.0
1.55   value=   136.0
1.54   value=   108.0
1.52   value=   144.0
1.51   value=   118.0
for(int i = 0; i < array.length; i++) {
    for(int j = 0; j < array.length; j++) {
        if(array[i] == array[j]) {
           // "i" would be a duplicate...
           break;
        }
    }
}