这是我的第一个问题,在形成它之前我进行了搜索,所以我希望一切都按要求进行。
我正在用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):
然后该方法应返回两个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空值(在单独的行上),其后是所需的输出,因此显然立即发生了。有人可以告诉我我在做什么错吗?
而且,更一般而言(为了帮助更多人),您如何实现类,该类的构造函数实例化另一个类并将其设置为属性值?
感谢您的帮助。另外,请注意,我并不是想让别人为我做我的工作。我已经花了几个小时,而我的实验室助教也不确定为什么会发生这种情况。如果他知道如何的话,他会帮助我纠正它。
谢谢。