for循环的增量无效

时间:2013-09-24 08:41:00

标签: java

我有这段代码

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的新手所以请帮助我。感谢。

4 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

在循环时,如果满足或不满足条件if(str.substring(i,i+4).equals(".xyz")),则无论如何都会从循环返回。并且永远不会执行i++

答案 2 :(得分:1)

你需要保持

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

{}

答案 3 :(得分:0)

if loop

return

boolean result = false; 将永远不在函数范围内

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

声明一个全局变量:

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

然后在循环中使用它:

return result;

在方法结尾处添加返回值:

{{1}}