Метод возвращает точку ближайшей цели из массива

введите сюда описание изображения

Не могу понять как написать циклы

import java.util.Arrays;

class TargetFinderTest {
    public static void main(String[] args) {
        int[] aiCoords = {10, 10};
        int[][] targets = {
                {20, 20},
                {15, 14},
                {30, 5}
        };

        TargetFinder targetFinder = new TargetFinder();
        int[] nearestTarget = targetFinder.findTarget(aiCoords, targets);

        //Expect [15, 14]
        System.out.println(Arrays.toString(nearestTarget));
    }
}

Не знаю как в цикле прописать реализацию. Это мой максимум:

class TargetFinder { 
    int [] n; 

    public int[] findTarget(int[] aiCoords, int[][] targets) { 
        for (int[] target : targets) { 
            if ((target[0] > (aiCoords[0] & aiCoords[1]))) { 
                n = new int[]{ target[0] }; 
            } 
        }
    }
}

Ответы (1 шт):

Автор решения: Nowhere Man

Самый простой вариант реализации с вычислением расстояния между заданной точкой aiCoords и точками в массиве targets:

public int[] findTarget(int[] aiCoords, int[][] targets) {
    double minDistance = Double.MAX_VALUE;
    int[] min = null;

    for (int[] point : targets) {
        double dx = aiCoords[0] - point[0];
        double dy = aiCoords[1] - point[1];
        double distance = Math.sqrt(dx * dx + dy * dy);

        if (distance < minDistance) {
            minDistance = distance;
            min = point;
        }
    }
    return min;
}

Вариант с использованием Stream API:

public int[] findTarget(int[] aiCoords, int[][] targets) {
    return Arrays.stream(targets) // Stream<int[]>
        .min(Comparator.comparingDouble(
            p -> Math.sqrt(Math.pow(p[0] - aiCoords[0], 2) + Math.pow(p[1] - aiCoords[1], 2))
        ))
        .orElse(null);
}
→ Ссылка