2014-10-05 4 views
1

Как вы можете видеть в моем классе «Страны», я отслеживаю самые большие населенности, области и плотности. Однако я не могу придумать, как ссылаться на позиции, в которых находятся эти элементы, и использовать соответствующий метод в классе «Страны» для вставки соответствующего имени страны с наивысшими значениями в указанной категории. Я знаю, что интерфейс кажется бесполезным для ситуации, но это требовало его назначения. Я включил примечания в код, где я думал, что вещи, которые я отсутствовал, пойдет.Проблема, вызывающая метод из ArrayList

Edit: Вот параметры задания, потому что мой вопрос был немного запутанная:

Написать эти принты программы: страна с самой большой площадью, страна с самым большим населением, и страну с наибольшая плотность населения. Создайте свое решение, используя только абстрактные классы и абстрактные методы.

Вот мой интерфейс

public interface CountriesInterface 
{ 

    public String largestPop(); 

    public String largestArea(); 

    public String popDensity(); 
} 

Вот класс, доступ к этому интерфейсу

public class Countries implements CountriesInterface 
{ 
    private String cName; 
    private int cPop; 
    private int cArea; 
    private int popDensity; 
    public Countries(String cName, int cPop, int cArea, int popDensity) 
    { 
     this.cName = cName; 
     this.cPop = cPop; 
     this.cArea = cArea; 
     this.popDensity = popDensity; 
    } 
    public String largestPop() 
    { 
     return cName; 
    } 
    public String largestArea() 
    { 
     return cName; 
    } 
    public String popDensity() 
    { 
     return cName; 
    } 
} 

Вот мой тестовый класс

import java.util.*; 
public class CountriesTest 
{ 
    public static void main(String[] args) 
     { 
      int population = 0; 
      int area = 0; 
      int density = 0; 
      int arbitraryValue = 0; 
      int arbitraryValue2 = 0; 
      int arbitraryValue3 = 0; 
      String outputPop; 
      String outputArea; 
      String outputDensity; 
      ArrayList<String> countryList = new ArrayList<String>(); 
      ArrayList<Integer> countryPopulation = new ArrayList<Integer>(); 
      ArrayList<Integer> countryArea = new ArrayList<Integer>(); 
      ArrayList<Integer> countryPopulationDensity = new ArrayList<Integer>(); 
      Scanner myScanner = new Scanner(System.in);    
      boolean done = false; 
      do 
      { 
       System.out.println("1. Enter a country \n2. Print countries with the largest population, area, and population density \n3. Exit"); 
       int choice = Integer.parseInt(myScanner.nextLine()); 
       if (choice == 1) 
       { 
        System.out.print("Enter name of country: "); 
        String input1 = myScanner.nextLine(); 
        countryList.add(input1); 
        System.out.print("Enter area of country in square kilometers: "); 
        String input2 = myScanner.nextLine(); 
        population = Integer.parseInt(input2); 
        countryPopulation.add(population); 
        System.out.print("Enter population of country: "); 
        String input3 = myScanner.nextLine(); 
        area = Integer.parseInt(input3); 
        countryArea.add(area); 
        density = population/area; 
        countryPopulationDensity.add(density); 
        Countries aCountries = new Countries(input1, population, area, density); 
        if(population > arbitraryValue) 
        { 
         population = arbitraryValue; 
         //I don't know whats supposed to go here 
        }  
        if(area > arbitraryValue2) 
        { 
         area = arbitraryValue2; 
         //I don't know whats supposed to go here 
        } 
        if(density > arbitraryValue3) 
        { 
         density = arbitraryValue3; 
         //I don't know whats supposed to go here 
        } 
       } 
       else if(choice == 2) 
       { 
        System.out.println("The country with the largest population: " + I don't know whats supposed to go here); 
        System.out.println("The country with the largest area: " + I don't know whats supposed to go here); 
        System.out.println("The country with the largest population density is: " + I don't know whats supposed to go here); 
       } 
       else if(choice == 3) 
       { 
        done = true; 
       }    
       else 
        System.out.println("Invalid Choice");  
      } 
      while (!done); 
      System.exit(0); 
     } 
} 
+2

Я читал ваш вопрос несколько раз, но я не мог понять, что вас беспокоит. можете ли вы объяснить свою проблему PLZ? »Однако я не могу придумать, как ссылаться на позиции, в которых находятся эти элементы, и использовать соответствующий метод в классе« Страны », чтобы вставить соответствующее название страны с наивысшими значениями в указанной категории» –

+0

что я хочу сделать, это выяснить, какая страна имеет наибольшее население, например, и просто напечатать название этой страны. – user3451158

+0

. Я думаю, что сначала вы должны взглянуть на ответ @Hovercraft Full Of Eels и после ухода эта проблема, что у вас есть –

ответ

2

Я боюсь, что вы можете начать потому что ваш код смотрит на метку с самого начала. Каждая страна должна быть определена методами интерфейса, которые возвращают имя String, население int или long, область int или long и плотность, которая может быть двойной. Каждой отдельной стране нет необходимости в самом большом, и он не должен иметь никакого метода, который возвращает largestXXX(), поскольку это должно быть собственностью сборной страны, а не отдельной страной.

Для упрощения, вы можете что-то вроде:

interface Country { 
    String getName(); 
    int getPopulation(); 
    // ... etc 
} 

class DefaultCountry implements Country { 
    // implement your methods 
} 

interface CountryCollection { 
    addCountry(Country country); 
    removeCountry(Country country); 
    Country getLargestPopulation(); 
    Country getLargestArea(); 
    .... 
} 

OK, ваша задача будет заключаться в реализации методов вашего интерфейса CountryCollection. Конкретный класс, вероятно, будет содержать List<Country> и назначить его ArrayList<Country>. затем в методе getLargestXXX() он использует цикл for, итерации через ArrayList, найдите страну с наибольшим XXX и верните эту страну. Например, если вы пытаетесь найти наибольшую совокупность, создайте локальную переменную int и Country в методе, например, называемую mostPop и selectedCountry, а внутри цикла - getPopulation() в каждой стране. Если население больше, чем текущее наибольшее значение, установите для текущей популяции страны самую большую переменную Pop и текущую страну для выбранной страны. В конце метода верните выбранную страну.

+0

Я не знаком с использованием второго интерфейса, не могли бы вы рассказать о том, как это работает? – user3451158

+0

@ user3451158: рассмотрите сначала отправку ваших полных требований к полному назначению, так как я не знаю, сколько интерфейсов вам нужно для вашего кода. –

+0

Я просто положил его в сообщение в качестве редактирования – user3451158