ArrayList 输出重复自身?
ArrayList output repeating itself?
所以我尝试使用组合框来显示不同类型食物的不同类别选项。每种食物都有自己的数组列表,如蔬菜、水果、乳制品等。因此当用户 select 选择食物类别时,它将在文本区域中显示该类别的所有食物。但是,每当 select 编辑不同的类别时,该列表就会不断重复自身。所以第一次点击没问题,只会显示一次食物列表。但是,如果您在此之后 select 一个不同的类别,该列表将重复出现。这是我现在使用的代码:
public class foodTypesJFrame extends javax.swing.JFrame {
// Food category arraylists
ArrayList <String> fruitsList = new ArrayList();
ArrayList <String> veggiesList = new ArrayList();
ArrayList <String> dairyList = new ArrayList();
public void foodCategory(String box, String category, ArrayList list)
{
box = foodCategoryBox.getSelectedItem() + "";
if (box.equals(category))
{
foodOutput.setText("");
int indexNumber = 0;
// Display the different foods
for (int index = 0; index < list.size(); index++)
{
indexNumber = index + 1;
foodOutput.append(indexNumber + ". " + list.get(index) + "\n");
}
}
}
private void categoryBoxActionPerformed(java.awt.event.ActionEvent evt) {
String foodType = foodCategoryBox.getSelectedItem() + "";
String fruits = "Fruits";
String veggies = "Vegetables";
String dairy = "Dairy";
Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
foodCategory(foodType, fruits, fruitsList);
foodCategory(foodType, veggies, vegetableList);
foodCategory(foodType, dairy, dairyList);
因此,如果我 select 首先是水果类别,它将输出
” 1. 苹果
2.橙色
3.草莓”
但是如果我 select 之后的蔬菜类别,它会输出
” 1.生菜
2. 胡萝卜
3.西兰花
4.生菜
5. 胡萝卜
6 西兰花
有没有人对如何使列表只显示一次有任何建议?
您在 ActionEvent
侦听器中调用 Collections.addAll(...)
这意味着每次点击都会将新元素添加到 ArrayList
中。要解决此问题,您需要初始化 class 的构造函数中的所有列表(如果您有固定的产品列表则更正确),或者在 Collections.addAll(...)
之前为每个列表调用 clear()
方法列表(如果您真的需要更改事件侦听器中的产品列表)
每次调用 categoryBoxActionPerformed
时,您都会将 相同的 项目添加到 ArrayLists
。
要解决此问题,您可以执行以下操作之一:
或者每次调用categoryBoxActionPerformed()
时重新初始化ArrayLists
,所以它看起来像这样:
//at the beginning of the method.
fruitsList = new ArrayList<>();
veggiesList = new ArrayList<>();
dairyList = new ArrayList<>();
或者用boolean
包裹起来:
boolean firstTime = true; // create a global variable
然后换行加法:
if(firstTime){
Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
firstTime = false;
}
所以我尝试使用组合框来显示不同类型食物的不同类别选项。每种食物都有自己的数组列表,如蔬菜、水果、乳制品等。因此当用户 select 选择食物类别时,它将在文本区域中显示该类别的所有食物。但是,每当 select 编辑不同的类别时,该列表就会不断重复自身。所以第一次点击没问题,只会显示一次食物列表。但是,如果您在此之后 select 一个不同的类别,该列表将重复出现。这是我现在使用的代码:
public class foodTypesJFrame extends javax.swing.JFrame {
// Food category arraylists
ArrayList <String> fruitsList = new ArrayList();
ArrayList <String> veggiesList = new ArrayList();
ArrayList <String> dairyList = new ArrayList();
public void foodCategory(String box, String category, ArrayList list)
{
box = foodCategoryBox.getSelectedItem() + "";
if (box.equals(category))
{
foodOutput.setText("");
int indexNumber = 0;
// Display the different foods
for (int index = 0; index < list.size(); index++)
{
indexNumber = index + 1;
foodOutput.append(indexNumber + ". " + list.get(index) + "\n");
}
}
}
private void categoryBoxActionPerformed(java.awt.event.ActionEvent evt) {
String foodType = foodCategoryBox.getSelectedItem() + "";
String fruits = "Fruits";
String veggies = "Vegetables";
String dairy = "Dairy";
Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
foodCategory(foodType, fruits, fruitsList);
foodCategory(foodType, veggies, vegetableList);
foodCategory(foodType, dairy, dairyList);
因此,如果我 select 首先是水果类别,它将输出 ” 1. 苹果 2.橙色 3.草莓” 但是如果我 select 之后的蔬菜类别,它会输出 ” 1.生菜 2. 胡萝卜 3.西兰花 4.生菜 5. 胡萝卜 6 西兰花
有没有人对如何使列表只显示一次有任何建议?
您在 ActionEvent
侦听器中调用 Collections.addAll(...)
这意味着每次点击都会将新元素添加到 ArrayList
中。要解决此问题,您需要初始化 class 的构造函数中的所有列表(如果您有固定的产品列表则更正确),或者在 Collections.addAll(...)
之前为每个列表调用 clear()
方法列表(如果您真的需要更改事件侦听器中的产品列表)
每次调用 categoryBoxActionPerformed
时,您都会将 相同的 项目添加到 ArrayLists
。
要解决此问题,您可以执行以下操作之一:
或者每次调用
categoryBoxActionPerformed()
时重新初始化ArrayLists
,所以它看起来像这样://at the beginning of the method. fruitsList = new ArrayList<>(); veggiesList = new ArrayList<>(); dairyList = new ArrayList<>();
或者用
boolean
包裹起来:boolean firstTime = true; // create a global variable
然后换行加法:
if(firstTime){
Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
firstTime = false;
}