我有两个字符串数组
String[] Mids contains
MSI
MSU
MSV
String[] sl contains
MSU
MSV
MSS
实际输出应为
Action
Action
Action cannot be set
for(int i=0;i<sl.length;i++){
for(int j=0;j<Mids.length;j++){
if((sl[i].equals(Mids[j]))){
System.out.println("Action");
}else{
System.out.println("Action cannot be set");
}
}
}
我得到的输出
Action cannot be set
Action cannot be set
Action cannot be set
Action cannot be set
Action
Action cannot be set
Action
Action cannot be set
Action cannot be set
答案 0 :(得分:4)
问题是你在两个数组上进行迭代,并且如果找到相同的值,则始终打印。但是你应该只在第一个循环中这样做。我改变了for循环:
for(int i=0;i<sl.length;i++){
boolean found = false;
for(int j=0;j<Mids.length;j++){
if((sl[i].equals(Mids[j]))){
found = true;
break;
}
}
if (found) {
stdOut.println("Action");
} else {
stdOut.println("Action cannot be set");
}
}
答案 1 :(得分:1)
要说明如果在数组中找不到元素,则需要将其与所有元素进行比较。只是因为一次比较失败,你不能断定在数组中找不到它。
尝试类似:
for(int i=0;i<sl.length;i++){
boolean found = false;
for(int j=0;j<Mids.length;j++){
if((sl[i].equals(Mids[j]))){
found = true;
break;
}
}
if(found) {
// print found.
} else {
// print not found.
}
}
答案 2 :(得分:0)
为什么不在显示s1和mids的for循环(i)下添加另一个打印行,以便更好地理解执行?
答案 3 :(得分:0)
另一种方法是使用更少的代码行和更少的迭代次数:
List<String> midsList = new ArrayList<String>(Arrays.asList(Mids));
for (String string : sl) {
if (midsList.contains(string)) {
System.out.println("Action");
} else {
System.out.println("Action cannot be set");
}
}