私の質問に対して十分な背景情報を提供していない場合は、あらかじめご容赦ください。長年の読者、初めての質問者。
タブ区切りの .txt ファイルを介してアクセスされる車のデータベースを持つプログラムを作成しています (最近、プログラミング クラスでこのようなことを行ったので、それを拡張したいと思いました)。
ターミナル ウィンドウを使用する代わりに、この形式では Car オブジェクト (メーカー、モデル、年、価格などを含む) を ArrayList に表示しています。Car オブジェクトの配列を使用しているため、JFrame、JList、および ListModel を使用しています。
私のプログラムでは、ユーザーがデータベースからアイテムを削除できる削除メソッドを作成したいと考えていました。最初に、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() (など) は、選択したインデックスの部分文字列になると考えました。
ご協力ありがとうございました!さらなる質問をより具体的かつ明確にする方法に関するご意見をいただければ幸いです。