我有一个代码段,它是
List<String> mylist = new ArrayList<String>();
mylist.add("ren");
mylist.add("rahul->RC");
mylist.add("arun");
String sr = "rahul->RC";
String sr1 = "rahul";
for ( int i=0;i<mylist.size();i++ )
{
if(mylist.get(i).contains(sr))
{
System.out.println(mylist.get(i)+" CONTAINS "+sr);
mylist.remove(mylist.get(i));
System.out.println("Inside : "+mylist);
mylist.add("again");
break;
}
if(mylist.get(i).equals(sr1));
{
System.out.println(sr1 +" EQUELS " +mylist.get(i));
mylist.remove(mylist.get(i));
mylist.add(sr);
break;
}
}
System.out.println("Final Output => "+mylist);
当我运行此代码时,我得到了输出
rahul EQUELS ren
Final Output => [rahul->RC, arun, rahul->RC]
我想知道我什么时候看到这个输出。 rahul EQUELS ren
怎么会发生这种情况?
我无法弄清楚问题?请帮我解决这个问题。
答案 0 :(得分:6)
你的第二个if语句后面有一个分号:
if(mylist.get(i).equals(sr1)); // Remove the semi-colon
分号标记if
语句的结尾,而后面的块只是一个本地块,它将始终被执行。
答案 1 :(得分:1)
这是经典的:在if(mylist.get(i).equals(sr1));
之后删除分号
分号终止if语句(无块),然后以下代码块与条件无关(您可以在代码中的任何位置使用块)。
代码
if (condition);
{
doSomething();
}
与
相同if (condition)
{
// nop
}
{
doSomething();
}
答案 2 :(得分:1)
我找不到任何奇迹。if(mylist.get(i).equals(sr1));
秒如果没有身体就结束了。所以在if语句({...}
)旁边每次都会执行,但是当你使用break
时,它会执行一次而不会循环。
if(mylist.get(i).equals(sr1)); // semi-colon makes the wounder :)
答案 3 :(得分:1)
删除分号。执行以下代码。由于半冒号,语句之后的语句将始终执行,并且将打印EQUELS。
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List<String> mylist = new ArrayList<String>();
mylist.add("ren");
mylist.add("rahul->RC");
mylist.add("arun");
String sr = "rahul->RC";
String sr1 = "rahul";
for ( int i=0;i<mylist.size();i++ )
{
if(mylist.get(i).contains(sr))
{
System.out.println(mylist.get(i)+" CONTAINS "+sr);
mylist.remove(mylist.get(i));
System.out.println("Inside : "+mylist);
mylist.add("veendum");
break;
}
if(mylist.get(i).equals(sr1))
{
System.out.println(sr1 +" EQUELS " +mylist.get(i))
mylist.remove(mylist.get(i));
mylist.add(sr);
break;
}
}
}
}