2

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

我有一个二维数组列表:

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

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

   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

4 回答 4

2

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

于 2012-12-12T08:07:55.020 回答
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 }
}
于 2012-12-12T08:11:20.273 回答
0

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

for(List<String> list : matrix){
 if(!list.contains(name){
   //add element to matrix
 }
}
于 2012-12-12T08:34:40.133 回答
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);
} 
于 2012-12-12T09:13:37.243 回答