Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找数组列表中的最小数_Java_Arrays_Arraylist_Collections_Euclidean Distance - Fatal编程技术网

Java 查找数组列表中的最小数

Java 查找数组列表中的最小数,java,arrays,arraylist,collections,euclidean-distance,Java,Arrays,Arraylist,Collections,Euclidean Distance,所以我有一些代码,就是求一系列点之间的距离。一种方法使用欧几里德距离,效果很好,另一种方法使用曼哈顿,我不知道为什么它不起作用 我将其设置为,对于这两种方法,数组列表中第一个元素的距离都为零,因此应该打印图像1是匹配的。然而,曼哈顿方法总是返回图像31,无论我使用多少不同的元素对其进行测试。我仔细检查了数组列表中的元素,它应该返回图像1 有人有什么想法吗?提前谢谢 public void matchEuclidean(){ for(int i = 0; i < numberimag

所以我有一些代码,就是求一系列点之间的距离。一种方法使用欧几里德距离,效果很好,另一种方法使用曼哈顿,我不知道为什么它不起作用

我将其设置为,对于这两种方法,数组列表中第一个元素的距离都为零,因此应该打印图像1是匹配的。然而,曼哈顿方法总是返回图像31,无论我使用多少不同的元素对其进行测试。我仔细检查了数组列表中的元素,它应该返回图像1

有人有什么想法吗?提前谢谢

public void matchEuclidean(){
    for(int i = 0; i < numberimages; i++){
        distanceE[i][0] = weights[i][0] - testweights[0][0];
        distanceE[i][1] = weights[i][1] - testweights[0][1];
      }
      
    for(int i = 0; i < numberimages; i++){
        distanceEu[i] = (Math.pow(distanceE[i][0], 2)) + (Math.pow(distanceE[i][1], 2));
        distanceEu[i] = Math.sqrt(distanceEu[i]);
       }  
       
     
for (double no : distanceEu) {
     list.add(Double.valueOf(no));
     }
      
   double max= Collections.min(list);
   double min =  list.indexOf(max) + 1;    
 System.out.println("(euclidean) the unknown image matches image " + (min)); 


 }
 
 public void matchManhattan(){
     for(int i = 0; i < numberimages; i++){
        distanceM[i][0] = weights[i][0] - testweights[0][0];
        distanceM[i][1] = weights[i][1] - testweights[0][1];
      }
      
      for(int i = 0; i < numberimages; i++){
        distanceMu[i] = distanceM[i][0] + distanceM[i][1];
        
       } 
  
     for (double no : distanceMu) {
     listM.add(Double.valueOf(no));
     }
      
     double max= Collections.min(listM);
     double min =  listM.indexOf(max) + 1;    
     System.out.println("(Manhattan) the unknown image matches image " + (min)); 


 }
public-void匹配欧几里得(){
对于(int i=0;i
您似乎忽略了在以下位置使用
Math.abs
函数:

没有它,你就没有一个有效的“距离”函数:你可以得到负值,三角形不等式也不成立

distanceMu[i] = Math.abs(distanceM[i][0]) + Math.abs(distanceM[i][1]);