如果我没有为我的问题提供足够的背景信息,请原谅我。长期读者,第一次提问。
我正在制作一个程序,其中有一个通过tab分隔的.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()等的字符串。。。(每个"获取"项目由大约10个空格分隔。)
我在if语句中做错了什么?我认为getMake()和getModel()(等等)将是所选索引的子字符串。
非常感谢您的帮助!任何关于我如何使进一步的问题更加具体和明确的意见,我们都将不胜感激!
这样做似乎是为了在某种数据结构中找到选定的汽车。您最好做一些事情,比如编程一个可以访问cars
本身的自定义列表模型。然后您可以立即检索所选内容。如果cars
是一个ArrayList,而list
只是与之相似,我也不明白为什么你不能做一些事情来达到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会使代码更短。)