Чтобы исключить исключительное исключение индекса массива, следует использовать инструкцию расширенный- for
, где и когда они могут.
Основная мотивация (и использовать), когда вы выполняете итерацию, и вам не требуются сложные шаги итерации. Вы не могли бы использовать расширенный for
для перемещения назад в массиве или только для итерации на каждом другом элементе.
Вы гарантированно не исчерпали элементы для повторения при этом, а ваш [исправленный] пример легко конвертируется.
Код ниже:
String[] name = {"tom", "dick", "harry"};
for(int i = 0; i< name.length; i++) {
System.out.print(name[i] + "\n");
}
... эквивалентен этому:
String[] name = {"tom", "dick", "harry"};
for(String firstName : name) {
System.out.println(firstName + "\n");
}
Для больших расстояний используйте формулу Хаверсайна для точности. На коротких дистанциях Пифагор в два раза быстрее.
16 значащих цифр (тип данных DOUBLE
) смешны. Вам не нужно различать двух разных блох на вашей собаке.
С Пифагором обязательно делите долготу на косинус широты - один градус долготы возле Хельсинки в два раза меньше, чем один градус на экваторе.
Еще несколько подробностей здесь: http://mysql.rjweb.org/doc.php/latlng
Если 1.6054631070094885
является разницей по широте, то подумайте об этом следующим образом : Если вы и я на одной долготе, но наши широты равны 1.605463 и 1.605464, то, ну, я не знаю вас достаточно хорошо, чтобы быть , что близко.
Невозможно сравнивать два значения с плавающей запятой без фактора выдумки:
If abs(a-b) < 0.00001, then treat them as equal.
Подробнее
Я рекомендую FLOAT
для lat, lng и расстояние, так как вы говорите о ресторанах. Если вы говорите не более чем о, скажем, 100 милях или километрах, то это выражение достаточно точное:
SQRT( ($lat - lat) *
($lat - lat) +
(($lng - lng) * COS(RADIANS(lat))) *
(($lng - lng) * COS(RADIANS(lat))) ) * $factor
Где ...
lat
и lng
являются именами FLOAT
столбцов в таблице, в единицах градусов. $lat
и $lng
- это значения местоположения, с которого вы начинаете, также в градусах. (PHP использует $
; другие языки используют другие соглашения.) $factor
составляет 69,172 для миль или 111,325 для километров. Сравнение Пифагора и GCD:
Pyt GCD
To Rennes: 93.9407 93.6542
To Vannes: 95.6244 95.6241