java - 不同类数组单例实例中 Find And Delete 方法中数组的全局索引

标签 java arrays

我有一个带有 singleton 方法的类,并且包含所有 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 中的索引时,我找到了列表中内容的实际全局结果,而不是新的数组实例。

最佳答案

我不确定我是否了解您的程序的确切工作方式,但这里有一个建议:

仅供引用:在 DvdCon 中,字段不需要是静态

在您的 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;
}

这样你只需要标题而不需要索引。处理索引是一种直接的方法,但您可能会遇到更多问题。例如,您无法始终确保列表中元素的顺序始终相同(例如,如果删除元素会发生什么)。如果有一天你决定使用 HashMap 而不是 ArrayList 会发生什么......等等。

所以:将标题传递给搜索方法并不按索引搜索标题。 好吧,我希望它能在某种程度上有所帮助:)

关于java - 不同类数组单例实例中 Find And Delete 方法中数组的全局索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734214/

相关文章:

java - Apache POI 工作簿中的多线程

java - 如何从 URI android Lollipop 获取真实路径

java - Libgdx for android 在主屏幕前显示黑色

C++ 代码在 GDB online 中有效,但在代码 :Blocks 中无效

JAVA - 无法调用我的数组方法

android - 如何在 Activity 之间传递 double 的二维数组?

java - 调用链的潜在问题

php - 计算数组内部的数组? PHP

arrays - Angular 2 如何遍历多维数组?

java - 从 IWorkspaceRoot 和位置字符串获取 IFile