遇到一个小问题,我不完全确定为什么这段代码不起作用。
我有一个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;
}
}
答案 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);
}