Java构造函数在所需对象之前创建了许多空实例

时间:2018-11-25 02:14:35

标签: java list dictionary constructor null

这是我的第一个问题,在形成它之前我进行了搜索,所以我希望一切都按要求进行。

我正在用Java进行学校作业。我能够产生所需的输出,但是首先创建了许多空实例。我不明白为什么。有关教授为该课程创建的图书馆的信息以及代码,如下所示

本课程包含的库:i2c.jar。可以找到here

该库中包括的

是Country和CountryDB类。可以在http://130.63.94.24/~roumani/book/doc/i2c/ca/roumani/i2c/Country.html

中找到Country类的API。

可以在http://130.63.94.24/~roumani/book/doc/i2c/ca/roumani/i2c/CountryDB.html上找到CountryDB类的API

系统要求我使用Country和CountryDB API创建一个名为Game的类。

唯一的属性是db,它是CountryDB的一个实例。

构造函数仅将此实例的属性(db)设置为新的CountryDB对象。

该类还应包含遵循此伪代码的方法(称为qa):

  1. 获取对数据库首都城市列表的引用
  2. 确定此列表的大小。校准它。
  3. 在[0,n)中生成一个称为索引的随机数。
  4. 调用列表中的get(index)以获得随机的首都。叫c
  5. 获取对数据库数据图的引用
  6. 在地图上调用get(c)以获得对一个国家的引用。称为参考。

然后该方法应返回两个String之一(在代码中将清楚显示)。一切正常,除了在所需输出之前得到很多“空值”。当进入列表时,数据库的大小为241,所以我怀疑我正在创建241个空实例和1个适当的实例。我不知道为什么。我已经测试了方法中的每一行代码,构造函数由教科书规定。

代码

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空值(在单独的行上),其后是所需的输出,因此显然立即发生了。有人可以告诉我我在做什么错吗?

而且,更一般而言(为了帮助更多人),您如何实现类,该类的构造函数实例化另一个类并将其设置为属性值?

感谢您的帮助。另外,请注意,我并不是想让别人为我做我的工作。我已经花了几个小时,而我的实验室助教也不确定为什么会发生这种情况。如果他知道如何的话,他会帮助我纠正它。

谢谢。

0 个答案:

没有答案