Java-конструктор создает множество нулевых экземпляров перед требуемым объектом - PullRequest
0 голосов
/ 25 ноября 2018

это мой первый вопрос здесь, и я выполнил поиск, прежде чем сформировать его, поэтому я надеюсь, что все в порядке.

Я работаю над школьным заданием на Java.Я могу произвести требуемый вывод, но сначала создается много пустых экземпляров.Я не понимаю почему.Информация о библиотеке, созданной профессором для курса, и код ниже

Библиотека, включенная в этот курс: i2c.jar.Его можно найти здесь .

, включенные в эту библиотеку, это классы Country и CountryDB.API для класса Country можно найти по адресу http://130.63.94.24/~roumani/book/doc/i2c/ca/roumani/i2c/Country.html

API для класса CountryDB можно найти по адресу http://130.63.94.24/~roumani/book/doc/i2c/ca/roumani/i2c/CountryDB.html

. Меня попросили создать класс с именем Game, используяCountry и CountryDB API.

Единственный атрибут - это db, который является экземпляром CountryDB.

Конструктор только устанавливает атрибут (дБ) для этого экземпляра для нового объекта CountryDB.

Также предполагается, что класс включает метод (называемый qa), следующий за этим псевдокодом:

  1. получить ссылку на список столиц базы данных
  2. , чтобы определитьРазмер этого списка.Вызовите его.
  3. сгенерируйте случайное число в [0, n) с именем index.
  4. вызовите get (index) в списке, чтобы получить случайную столицу.Назовите его c
  5. , чтобы получить ссылку на карту данных базы данных
  6. , вызовите get (c) на карте, чтобы получить ссылку на страну.Назовите его ref.

Затем предполагается, что метод возвращает одну из двух строк (что будет ясно из кода).Все работает как надо, за исключением того, что я получаю много «нулей» перед желаемым выводом.При создании в список db имеет размер 241, поэтому я подозреваю, что я создаю 241 нулевой экземпляр и 1 правильный экземпляр.Я понятия не имею, почему, хотя.Я проверил каждую строку кода в моем методе, и конструктор был продиктован учебником.

CODE

package ca.yorku.eecs.caps;

import java.util.List;
import java.util.Map;

import ca.roumani.i2c.Country;
import ca.roumani.i2c.CountryDB;

public class Game
{
    private CountryDB db;

    public Game()
    {
       this.db = new CountryDB();
    }

    public String qa()
    {
       List<String> capitals = db.getCapitals();
       System.out.println(capitals.toString());
       int n = capitals.size();
       System.out.println(n);
       int index = ((int) (n * Math.random()));
       System.out.println(index);
       String c = capitals.get(index);
       System.out.println(c);

       Map<String, Country> data = db.getData();
       Country ref = data.get(c);

       if (Math.random() > 0.5)
         {
           return "What is the capital of " + ref.getName() + "? \n" + ref.getCapital();
         }
       else
         {
           return ref.getCapital() + " is the capital of? \n" + ref.getName();
         }
    }

    public static void main(String[] args)
     {
        Game g = new Game();
        System.out.println(g.qa());
     }

}

операторы System.out.println () предназначены только для проверки на наличие нулевых значений.Это очевидно происходит немедленно, потому что мой вывод psvm равен 241 нулю (в отдельных строках), за которым следует желаемый вывод.Может кто-нибудь сказать мне, что я делаю неправильно?

И, вообще, (чтобы помочь большему количеству людей), как вы реализуете классы, конструктор которых создает другой класс и устанавливает его как значение атрибута?

Я ценю любую помощь.Также, пожалуйста, обратите внимание, я не пытаюсь заставить других делать свою работу за меня.Я потратил на это часы, и моя лаборатория ТА тоже не знала, почему это происходит.Он бы помог мне исправить это, если бы знал как.

Спасибо.

...