2013-09-24 32 views
-1

我有这样的代码增量在for循环没有任何影响

public class CountHi { 
    static public void main(String[] args) { 
     String s1 = "abc.xyz"; 
     System.out.println(s1.length()); 
     System.out.println(xyzThere(s1)); 
    } 
    public static boolean xyzThere(String str) { 
     if (str.length() > 3) 
     { 
      for (int i = 0; i < str.length() - 3; i++) { 
       System.out.println(str.substring(i, i + 4)); 
       if (str.substring(i, i + 4).equals(".xyz")) 
       { 
        return false; 
       } else { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 
} 

我已经从最后一小时左右搜索,但未能找到一个可能的原因是,i++已经成为死代码。其实我是编程和Java新手,所以请帮助我。谢谢。

+0

也许你:

 if (str.substring(i, i + 4).equals(".xyz")) { result = false; } else { result true; } 

在方法的末尾添加回报知道,你可以使用str.contains(“。xyz”)来实现相同的目标。 –

+0

你为什么说这是死码?它在你的IDE中显示吗?你在哪里得到那 – SKT

+0

ur代码将只执行一次,因此它不执行i ++ –

回答

0

if loop总是会去outof的功能,因为return

你应该使用一个布尔变量,并将返回放在方法的末尾。

声明一个全局变量:

boolean result = false; 

然后用它YOUT如果循环:已经

return result; 
7

由于您在for循环的第一次迭代中返回,所以i++部分将永远不会执行。

for(int i = 0; i < str.length()-3;i++) { 
    System.out.println(str.substring(i,i+4)); 

    if(str.substring(i,i+4).equals(".xyz")) { 
     return false; 

    } else { 
     return true; 
    } 
} 

ifelse块要么将被执行,他们都立即返回。所以循环没有机会再次迭代。

我不明白那里的循环点。如果你只是想检查扩展名是否为.xyz,你可以用一个子字符串来完成。

if (s1.substring(s1.lastIndexOf(".")).equals(".xyz")) { 
    // true 
} 

或者,如果你只是想测试一下,如果你的字符串包含.xyz,然后只需使用String#contains()方法:

s1.contains(".xyz"); 
+0

@ Rohit ..实际上我在学习阶段并试图解决这个问题“如果给定的字符串返回true包含“xyz”的外观,其中xyz不直接以句点(。)开始,因此“xxyz”会计数但“x.xyz”不会。“ – Gaurav

+0

@Gaurav。那么你可以直接做 - 's1.contains(“。xyz”);'。这将工作正常。如果你有更多的动态部分,那么你可能需要一个正则表达式。 –

1

而循环,如果条件if(str.substring(i,i+4).equals(".xyz"))是满意还是不满意,它会返回任何情况下从循环。而i++永远不会执行。

1

你需要保持

 System.out.println(str.substring(i,i+4)); 

{}