Пара вещей:
1.для границ
Петли определены как for(int z = 0 ; z < _noOfCities-1 ; z++)
(то же самое для a).Похоже, последний Citi не обрабатывается.Если имеется 10 городов, а первый - 0, последним будет 9. Число городов минус один - 9, поэтому, когда z равно 9, а 9 <9 ложно, оно не будет обработано. </p>
2.northOfCities
роль не ясна
Нахождение в цикле и имя переменной предполагают, что это будет набор городов, но вместо этого это String
, и оно перезаписывается при каждом совпадениицикл переменной a
.Если ему действительно присвоено значение, оно будет содержать только последнее соответствующее значение.
3.Null
оценка
Этот раздел кода, по-моему, должен находиться вне цикла переменных a
.Таким образом, он оценивается после оценки всех возможных совпадений.Когда цикл завершается, имеет смысл посмотреть, равна ли переменная null
, то есть не найдено ни одного совпадения.Кроме того, если переменная null
, вызов equals()
выдаст NPE
, поэтому замените его на ==
.
if(_cities[z].getCityName().equals(cityName))
{
for(int a = 0 ; a < _noOfCities-1 ; a++)
{
Point city1 = _cities[z].getCityCenter();
Point otherCity = _cities[a].getCityCenter();
if(city1.isUnder(otherCity))
{
northOfCities = _cities[a].getCityName();
System.out.println(northOfCities);
}
}
if(northOfCities == null){
String noCitiesNorth = "There is no cities north of "+cityName;
return noCitiesNorth;
}
}
EDIT I
Со следующими изменениями код должен запускать печать городов к северу от заданного города.Метод возвращает имя последнего найденного города или сообщение об ошибке, указывающее, не найден ли город, или нет ли городов на севере.Я должен был предположить, что у вас есть класс Citi
, если не просто заменить имя класса типом элементов, хранящихся в массиве _cities.
Дальнейшие улучшения : вы можете изменить методвернуть коллекцию всех найденных городов и выдать исключения для разных ошибок.
public String citiesNorthOf(String cityName){
String northOfCities = null; //Return value
City citi = null;
for(int z = 0 ; z < _noOfCities; z++){
if(_cities[z].getCityName().equals(cityName)){
citi = _cities[z];
for(int a = 0 ; a < _noOfCities ; a++){
Point cityCenter = citi.getCityCenter();
Point otherCityCenter = _cities[a].getCityCenter();
if(cityCenter.isUnder(otherCityCenter)){
northOfCities = _cities[a].getCityName();
System.out.println(northOfCities);
}
}
if(northOfCities == null){
northOfCities = "There is no cities north of "+cityName;
}
}
}
if(citi == null){
northOfCities = "There is no city with the name: " +cityName;
}
return northOfCities;
}