Проблема правильно с использованием логического метода наряду с использованием рекурсивных методов - PullRequest
0 голосов
/ 24 февраля 2019

Я сейчас работаю над проектом, который использует рекурсию.Прямо сейчас у меня есть 3 класса, у первого есть объект и переменные, а также мои методы.

public class Country
{
   private String name;
   private String capital;
   private double population;

   public Country (String name, String capital, double population)
   {
      this.name = name;
      this.capital = capital;
      this.population = population;
   }

   public String getName()
   {
      return name;
   }

   public String getCapital()
   {
      return capital;
   }

   public boolean isLarge()
   {
      if (population > 50.00)
        return true;
      else 
      {
        return false;
      }
   }

   public double getPopulation()
   {
      return population;
   } 

   public String toString()
   {
      return "\nName of Country: " + name + "\t Country's Capital: " + capital + "\t Population of Country: " 
      + population + " Million"+"\n";
   }    
}

Мой второй класс имеет все рекурсивные методы

public class CountryCollection
{
   public static String toString(Country[] list, int n)
   {
       if (n==0)
           return "";
       else
           return toString(list, n-1) + list[n-1].toString();
   }

   public static int countLargeCountries(Country[] list, int n) 
   {
       if (n==0)
          return 0;
       else if (list[n-1].isLarge())
          return countLargeCountries(list, n-1) + 1;
       else
          return countLargeCountries(list, n-1);
   } 

   /*public static Country smallestCountry(Country[] list, int n)
   {
       if (n==1) 
            return list[0];
       else if (list[n-1]<list[0])
          list[0] = list[n-1];
      return smallestCountry(list, n-1);
    }*/
   // keep geting bad operand type WILL FIX LATER dont know why

   public static void printLargeCountries(Country[] list, int n) 
   { 
      if (n>0) 
       {
           printLargeCountries(list, n-1);
           System.out.println(list[n-1].isLarge());
       }
   }
}

это гдеУ меня проблема с моим кодом.для метода public static void printLargeCountries(Country[] list, int n)

Вывод выводит значение true или false независимо от того, превышает ли население страны 50 миллионов или нет.Вот так

true
true
false
false
false
false
false
true
false
false
false
false

Кажется, я не могу понять, как напечатать страны с большим населением, вместо того, чтобы вывести мои выходные данные как истинные или ложные для всех стран, независимо от того,их население превышает 50 миллионов человек.

Я хочу, чтобы выходные данные были напечатаны

(с использованием рекурсии)

USA 
France
Japan

или просто

Name of Country: USA     Country's Capital: Washington,D.C   Population of Country: 326.17 Million

Name of Country: France  Country's Capital: Paris    Population of Country: 65.23 Million

Name of Country: Japan   Country's Capital: Tokio    Population of Country: 126.53 Million

У меня есть тестовый класс, который сканирует из входного файла с именем inData.txt

public class TestCountryCollection
{ 
  public static void main(String[]args) throws IOException
  {          
     Country[] myList = new Country [12];
     int myCount = 0; 

     Scanner fileScan;
     double population;
     String name;
     String capital;

     Country oneCountry;

     fileScan = new Scanner (new File("inData.txt"));
     while (fileScan.hasNext())
     {
         name = fileScan.next();
         capital = fileScan.next();        
         population = fileScan.nextDouble();
         oneCountry = new Country(name,capital,population);
         myList[myCount] = oneCountry;
         myCount++;
     }
     CountryCollection obj = new CountryCollection();
     System.out.println("Country Info \n"  + obj.toString(myList,myCount));
     System.out.println("Number of Large Countries: " + obj.countLargeCountries(myList,myCount));

     obj.printLargeCountries(myList,myCount);
  }
}

При попытке переписать мой код, метод void imИмея проблему, я либо застрял с выводом печати true или false, либо вывод печати вообще ничего без ошибок.Я пробовал что-то подобное, но безрезультатно

   public static void printLargeCountries(Country[] list, int n) 
   { 
      if (n==0)
        System.out.println("There are no Large Countries");
      else if (list[n-1].isLarge())
        System.out.println(list[n-1]);    
}

Вот текстовый документ на случай, если он поможет.

USA           Washington, D.C   326.17
France        Paris        65.23
Slovenia      Ljubljana    2.08
Slovakia      Bratislava   5.44
Liechtenstein Vaduz        0.05
Monaco        MonteCarlo   0.04
Spain         Madrid       46.42
Japan         Tokio        126.53
Afghanistan   Kabul        35.53
Australia     Canberra     24.61
Ghana         Accra        28.83
Norway        Oslo         5.26

Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 24 февраля 2019

Здесь вы просто печатаете результат isLarge:

System.out.println(list[n-1].isLarge());

Вы должны использовать оператор if, чтобы проверить результат isLarge, а затем распечатать страну:

if (list[n-1].isLarge()) {
    System.out.println(list[n-1].getName());
}
...