【问题标题】:while statement and if statemenwhile 语句和 if 语句
【发布时间】:2016-02-29 03:32:57
【问题描述】:

我从 Oracle 的 Java 教程中获得了以下代码,它工作得很好。

我了解for-、while 循环和if 语句的工作原理,但是,我很难理解下面的whileif 语句。

为什么在下面的while和if语句中一切都是这样?

class ContinueWithLabelDemo {
    public static void main(String[] args) {

        String searchMe = "Look for a substring in me";
        String substring = "sub";
        boolean foundIt = false;

        int max = searchMe.length() - 
                  substring.length();

    test:
        for (int i = 0; i <= max; i++) {
            int n = substring.length();
            int j = i;
            int k = 0;
            while (n-- != 0) {
                if (searchMe.charAt(j++) != substring.charAt(k++)) {
                    continue test;
                }
            }
            foundIt = true;
                break test;
        }
        System.out.println(foundIt ? "Found it" : "Didn't find it");
    }
}

【问题讨论】:

    标签: java if-statement while-loop


    【解决方案1】:
    while (n-- != 0) {
                if (searchMe.charAt(j++) != substring.charAt(k++)) {
                    continue test;
                }
            }
    

    说明

    While 语句

    1.) 当n--(首先使用nthen decreement!= 0 时,继续循环直到n reaches 0

    2.) 直到n is not equal to 0,它一直在输入inside while loop

    3.) 一旦进入 while loop 内部,它就会进入 validates if condition

    如果语句

    if (searchMe.charAt(j++) != substring.charAt(k++))
    

    searchMe.charAt(j++) //j++searchMe String 位置处的字符

    substring.charAt(k++) //k++substring String 位置处的字符

    If statement 实际上匹配两个字符串中给定位置的字符

    例如。

    String searchMe = "Look for a substring in me";
    String substring = "sub";
    

    在任何给定的情况下,j = 3, k= 1

    searchMe.charAt(4) // 返回字符k,记住索引从0开始

    substring.charAt(1) // 返回字符u,记住索引从0开始

    如果这样比较的话,

    if('k' != 'u')
    

    【讨论】:

    • 非常感谢您的帮助!!非常感谢!
    • @dzjustinli 如果答案完全让您满意,请接受。如果可能的话,也要投票。其他有问题的用户可能会找到这个。
    • @dzjustinli 回答已编辑以回答更多问题,希望现在清楚
    • 你也应该解释一下标签部分,也许注意它们是多么不常见。
    • @ankur-singhal 非常感谢!不敢相信你的解释有多详细!!突然间,一切对我来说变得如此清晰。只是想让你知道我真的很感谢你的帮助。已经接受并投票赞成答案。
    【解决方案2】:

    继续上面的解释,我想补充一点,代码也有一个标签,

    test:
    for (int i = 0; i <= max; i++) {
        int n = substring.length();
        int j = i;
        int k = 0;
        while (n-- != 0) {
            if (searchMe.charAt(j++) != substring.charAt(k++)) {
                continue test;
            }
        }
        foundIt = true;
            break test;
    } 
    

    这里的test是一个java标签,语句

    continue test
    

    如果 if 块成功执行,则将控制权发送到 for 循环的下一次迭代,例如上面的 for 情况

    j=3 and k=1
    searchMe.charAt(i) //gives k
    substring.charAt(k) //gives u
    

    如上所述比较后

    if(k!=u)
    continue test //control goes to the for loop from here and next iteration is executed
    

    如果block没有被执行

    break test // makes the control come out of the for loop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 2016-01-12
      • 2019-04-08
      • 2012-06-18
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      相关资源
      最近更新 更多