使用for循环和if语句将String添加到2D Arraylist

时间:2012-12-12 08:03:42

标签: java arraylist

遇到一个小问题,我不完全确定为什么这段代码不起作用。

我有一个2d arraylist:

List<List<String>> matrix = new ArrayList<List<String>>();

我有一个按钮,根据用户输入在矩阵中添加一个arraylist。但在添加用户输入之前,我需要按钮来搜索该字符串是否已存在。 我所拥有的代码不会产生任何错误,但除了第一个元素之外,它不能区分现有字符串和现有字符串。它添加了用户放入的所有内容,无论它是否存在。此外,代码仅在矩阵数组中已包含某些元素时才起作用,如果矩阵为空,则代码根本不起作用。我做错了什么?

   String name = NameTXT.getText(); 
   String amount = CountTXT.getText();

   for (int i = 0; i < matrix.size(); i ++){
     String search = matrix.get(i).get(0);
     if (name.equals(search)){
         OutputTXT.setText("Item already exists");
         break;
     } else {
         List<String> col = new ArrayList<String>();
         col.add(name);
         col.add(amount);
         matrix.add(col);
         OutputTXT.setText(amount +" "+ name +" added");
         break;
     }
   }

4 个答案:

答案 0 :(得分:2)

中断;意味着你完全停止for循环。如果您只想转到矩阵中的下一个项目,可以使用continue。

答案 1 :(得分:0)

呃......如果我是你,我会尝试foreach语法而不是经典语法。我猜这就是为什么当矩阵为空时你的代码不起作用的原因:你不能用空的arraylist做这个:

matrix.get(i).get(0);

此外,else子句嵌入在if子句中,所以我不确定代码是如何编译的。

你应该尝试类似的东西:

for(List<String> elem : matrix){
     if(elem.get(0).equals(name)){
     // do stuff
     }
     else{ //do other stuff }
}

答案 2 :(得分:0)

为什么要遍历列表中的每个项目而不只是使用contains:

for(List<String> list : matrix){
 if(!list.contains(name){
   //add element to matrix
 }
}

答案 3 :(得分:0)

单独搜索项目和项目插入:

String name = NameTXT.getText(); 
String amount = CountTXT.getText();

// searching for product
boolean isNewItem = true;

for (int i = 0; i < matrix.size(); i++){
    String search = matrix.get(i).get(0);

    if (name.equals(search)){
        OutputTXT.setText("Item already exists");
        isNewItem = false;
        break;
    } 
}

// insert if new item 
if ( isNewItem ) {
    List<String> col = new ArrayList<String>();
    col.add(name);
    col.add(amount);
    matrix.add(col);
    OutputTXT.setText(amount +" "+ name +" added");
}

实际上,最好以抽象的方式进行设计,并使用语言工具来解决您的问题,例如,如果项目列表列表更容易工作:

class Item {
    private String name;
    private String amount;

    public Item(String name, String amount) {
        this.name = name;
        this.amount = amount;
    }

    public String getName() { 
        return this.name;
    }

    public String getAmount() {
        return this.amount;
    }

    @Override
    public boolean equals(Object other) {
        if ( other == this )
            return true;

        if ( other == null )
            return false;

        if ( other.getClass() != this.getClass() )
            return false;

        Item otherItem = (Item) other;
        return otherItem.getName().equals(this.name);
    }
}

然后列表将是:

List<Item> items = new ArrayList<Item>();

当您需要搜索时:

Item item = new Item(NameTXT.getText(), CountTXT.getText());

if ( !items.contains(item) ) {
   items.add(item);
}