I wrote the code below, where from an initialized list of countries the method will return all the countries who have a longitude of >= 5, the code works but now I want the method to return the name of countries that are close to String D within a 5 degrees range of longitude.
I tried implementing the scanner as shown below but I still get countries that have longitude higher than 5. how can I make the method return the name of countries based on the user input.
ArrayList<String> CountriesDistance= new ArrayList<>(); Scanner scanner= new Scanner(System.in); System.out.print("Enter The Name of a Country: "); String D= scanner.nextLine(); for(Country country : Countries) if (!CountriesDistance.contains(country.CountryName.equals(D)) && country.getLongitude() >= 5) CountriesDistance.add(country.CountryName); System.out.println(CountriesDistance);
Advertisement
Answer
Correct your if statement.
You are writing following …
if (!CountriesDistance.contains(country.CountryName.equals(D)) && country.getLongitude() >= 5)
The “country.CountryName.equals(D)” part returns true or false. So you are checking if CountriesDistance not contains true/false AND if the longitude of the country is greater or equal to 5.
I guess you ment:
if(!CountriesDistance.contains(inputCountryAsString) && (country.getLongitude() <= baseCountry.getLongitude() + 5 && country.getLongitude() >= baseCountry.getLongitude() - 5))
I initialized baseCountry like this:
Country baseCountry = getCountryByName(countries, inputCountry); public static Country getCountryByName(Countries countries, String name) { Country country = null; for (Country c : Countries) { if (c.getName().equals(name)) country = c; } return country; }
In this case I got the name of the Country by calling getName() which I implemented like this:
class Country { String countryName; public String getName() { return countryName; } }