为什非要在for循环外面++i,for循环里面直接i=i+a不行吗?半天没想明白

import java.util.Scanner;

/**
*

  • @author Administrator
    */
    public class Main {

    /**

    • @param args the command line arguments */

    public static int f(String s1,String s2){
    int a = s1.length();
    int b = s2.length();
    int i = 0,sum = 0;
    while( i <= (b - a)){
    if(s1.charAt(0) == s2.charAt(i)){
    if(s2.substring(i, i + a ).equals(s1))
    {i = i + a - 1 ;
    sum++;
    }
    }
    ++i;
    }
    return sum;
    }
    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String s1=sc.nextLine();
    String s2=sc.nextLine();
    System.out.println(s1+"="+Main.f(s1, s2));
    }
    }

因为有可能第二个IF没进去,如果没进去的话,而i的改变还在第二个IF中,那就成死循环了~~

有这行代码if(s2.substring(i, i + a ).equals(s1))在i = i + a - 1 ;之前,也就是说这句代码的执行是有条件的,也就是说,如果这个条件不成立,后面一样要做++i,但i = i + a - 1 却是未必执行的,一个是有条件的,一个是无条件的,所以无法合并到一起去。

++i 在if语句外,是无条件执行的。
i= i + a - 1 在if语句内,是有条件执行的。
两者不好结合的。

要两者结合也只有在if语句外结合

while (i <= (b - a)) {
    int z = 0;
    if (s1.charAt(0) == s2.charAt(i)) {
        if (s2.substring(i, i + a).equals(s1)) {
            z = a - 1;
            sum++;
        }
    }
    i += z + 1;
}

判断语句的原因吧,有一定的限制导致不走这一步