0

如果我没有为我的问题提供足够的背景信息,请提前原谅我。长期阅读,第一次提问。

我正在制作一个程序,其中有一个通过制表符分隔的 .txt 文件访问的汽车数据库(我们最近在我的编程课上做了类似的事情,所以我想扩展它)。

我的格式不是使用终端窗口,而是在 ArrayList 中显示 Car 对象(包含品牌、型号、年份、价格等)。我正在使用 JFrame、JList 和 ListModel,因为我使用的是 Car 对象数组。

在我的程序中,我想创建一个删除方法,用户可以在其中从数据库中删除项目。最初,他们会从 JList 中选择项目,然后单击删除按钮。这会调用 delete() 方法,即下图所示的选项卡...

void delete()
    {
        int i = list.getSelectedIndex();
        String string = (String)listModel.getElementAt(i); 


        for(Car c : cars)
        {
            String year = String.valueOf(c.getYear());
            String conditionReport = String.valueOf(c.getConditionReport());
            String price = String.valueOf(c.getPrice());

            if(c.getMake().indexOf(string) != -1 && c.getModel().indexOf(string) != -1 && year.indexOf(string) != -1 && conditionReport.indexOf(string) != -1 && price.indexOf(string) != -1 && c.getWarranty().indexOf(string) != -1 && c.getComments().indexOf(string) != -1)
            {
                int choice = JOptionPane.showConfirmDialog(null, "Are you sure you would like to remove the "  + cars.get(i).getYear() + " " + cars.get(i).getMake() + " " + cars.get(i).getModel() + "?", "Choose One", JOptionPane.YES_NO_OPTION);
                if(choice == JOptionPane.NO_OPTION || choice == JOptionPane.CLOSED_OPTION)
                {
                    return;
                } else
                {
                    cars.remove(c);
                    listModel.removeElementAt(i);
                }
            }
        } 


        writeFile();
    }

我已经指出我的问题在 if 语句中。(我前后打印了一些东西,试图找到程序所在的位置。'list' 是我的 JList,'listmodel' 是我的默认列表模型。Car 是我创建的包含元素的对象(如 get 方法所示) ). listModel 中显示的元素只是显示 getMake()、getModel() 等的字符串...(每个“get”项之间用大约 10 个空格分隔。)

我在 if 语句中做错了什么?我认为 getMake() 和 getModel() (等等)将是所选索引的子字符串。

非常感谢您的帮助!任何有关我可以使进一步的问题更加具体和清晰的方法的意见将不胜感激!

4

1 回答 1

0

似乎您这样做是为了在某种数据结构中找到选定的汽车。你最好做一些事情,比如编写一个可以访问cars自身的自定义列表模型。然后您可以更立即地检索选择。如果cars是一个list仅平行的 ArrayList,我也不明白为什么你不能做一些cars.remove(list.getSelectedIndex());. 或者由于 JList 可以显示任何对象,覆盖 Car 的 toString 以显示列表当前显示的内容并让列表显示 Cars。然后就可以了cars.remove((Car)list.getSelectedValue());

但除此之外,根据您的描述,听起来您打算以另一种方式进行评估。它是应该包含所有 Car 属性的列表项,而不是包含列表项的所有 Car 属性。所以像

if( string.contains(c.getMake()) && string.contains(year) // and so on

(或者使用 indexOf 但由于 contains 仅返回indexOf > -1,使用 contains 会使您的代码更短一些。)

于 2013-12-25T21:39:20.267 回答