我有一个带有singlton方法的类,并且包含所有DVD的数组。
public class DvdCon
{
private static ArrayList<Dvd> dvds;
private static DvdCon instance;
private static int i = 0;
public DvdCon()
{
dvds = new ArrayList<Dvd>();
}
public static DvdCon getInstance()
{
if(instance == null)
{
instance = new DvdCon();
}
return instance;
}
public void addDvd(Dvd d)
{
dvds.add(d);
}
public void deleteDvd(Dvd d)
{
dvds.remove(d);
}
public Dvd findDvd(String title)
{
int i = 0;
boolean found = false;
while (!found && i<=dvds.size()){
if (title.equals (dvds.get(i).getTitle())){
found = true;
}
else {
i++;
}
if (found){
return dvds.get(i);
}
}
return null;
}
}
如果我们查看方法i
中作为局部变量的findDvd
索引变量,我想在此类中使用该全局变量:
public class DvdCtr
{
private DvdCon dCon;
private Dvd dvd;
public DvdCtr()
{
dCon = new DvdCon();
}
public void createDvd(String barcode, String title, String artist, String publicationDate)
{
Dvd d = new Dvd(barcode, title, artist, publicationDate);
dCon.addDvd(dvd);
}
public Dvd findDvd(String title)
{
return dCon.findDvd(title);
}
public void updateDvd(Dvd d, String barcode, String title, String artist, String publicationDate)
{
dvd.setBarcode(barcode);
dvd.setTitle(title);
dvd.setArtist(artist);
dvd.setPublicationDate(publicationDate);
}
public void deleteDvd(Dvd dvd)
{
dCon.deleteDvd(dvd);
}
public void findAndDeleteDvd()
{
dvd.getTitle();
{
boolean found = false;
while (!found && dvd.getTitle(i)){
if (title.equals (dCon.getInstance().dvds.get(dCon.getInstance().i).getTitle())){
found = true;
}
else {
i++;
}
if (found){
deleteDvd();
}
}
return null;
}
}
}
现在在findAndDeleteDVD
方法中,我想使用i
索引,因为它是原始数组的单例实例。所以我不想要一个新的数组列表,我希望它能够查看实际的列表。
但是当我尝试创建一个全局字段时,原始类的构造函数由于int
而停止工作......我该怎么做?
再次实际问题:想要创建一个数组实例,因此只存在一个数组,当我查看findAndDeleteDvd
中的索引时,我发现列表中的内容的实际全局结果而不是新的数组实例。
答案 0 :(得分:1)
我不确定我的程序是否正常工作,但这里有一个建议:
仅供参考:在DvdCon
中,字段不一定是static
。
在findAndDeleteDvd()
中,您可能需要进行一些更改。您在上面发布的代码没有多大意义:)
如果按标题搜索,则需要将标题传递给方法
public void findAndDeleteDvd(String title) { // pass the title to the method
Dvd foundDvd = dCon.findDvd(title); // findDvd by title and save a local reference (no need for it to be global
deleteDvd(foundDvd); // delete the dvd (by its reference)
}
到目前为止一切顺利。另一个建议,以方便您的搜索算法找到其标题的DVD:
DvdCon
中的:
public Dvd findDvd(String title) {
for (Dvd dvd : dvds) { // loops through the whole list of dvds
if (dvd.getTitle().equalsIgnoreCase(title)) { // compares the dvd's title with the parameter title
return dvd; // if equal, return dvd
}
}
return null;
}
这样你只需要title
而没有索引。处理指数是一种直接的方法,但您可能会遇到更多问题。例如,您无法始终确保列表中元素的顺序始终相同(例如,如果删除元素会发生什么)。如果有一天你决定使用HashMap而不是ArrayList等,会发生什么呢?
所以:将标题传递给搜索方法并搜索标题而不是索引。 好吧,我希望它在某种程度上有所帮助:)