2013-08-21 100 views
-1

我有一个代码片段,它是意外的输出 - Java的

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

使用两个if条件。如果条件成功,则在第二个值中。 – Veera

回答

6

你有一个分号你的第二个以后的if语句:

if(mylist.get(i).equals(sr1)); // Remove the semi-colon 

分号标志着if语句的结束,和下面的块,只是一个局部块,这将永远被执行。

+0

Ohh ...该死..我没有在那里看到那个分号。无论如何谢谢Rohit .... –

+0

@畲。有时会发生。欢迎您:) –

1

这是经典:后if(mylist.get(i).equals(sr1)); 分号结束if语句(没有块),和下面的代码块则无关的条件删除分号(你可以有块,你的代码的任何地方)。

代码

if (condition); 
{ 
    doSomething(); 
} 

相同

if (condition) 
{ 
    // nop 
} 
{ 
    doSomething(); 
} 
+0

在不相关的说明中,请不要[批准建议的修改](http://stackoverflow.com/review/suggested-edits/2763764)使用反引号强调,但拒绝或改进它们 - 请参阅例如[here](http://meta.gaming.stackexchange.com/q/7437/88)为什么 –

+0

@TobiasKienzler:好点,我没有意识到这个问题,从现在开始我会更加谨慎。感谢提示,我明白了:) –

1

我找不到任何奇迹。 if(mylist.get(i).equals(sr1));秒如果没有正文结束。所以if语句({...})旁边会执行每次,但如您使用break它执行一次并跳出循环。

if(mylist.get(i).equals(sr1)); // semi-colon makes the wounder :) 
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; 
     } 
    } 
} 

}