Метод возвращает точку ближайшей цели из массива
Не могу понять как написать циклы
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);
}