while(n--!= 0){}在这段代码中做了什么?

时间:2016-02-09 03:14:50

标签: java

在以下代码中该行转换为什么?

while (n-- != 0){}?如果我没有错误,当searchMe的长度从子串的长度中扣除时,n是18,那么这条线说的是18减少(17)不等于0进行搜索吗?

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");
    }
}

4 个答案:

答案 0 :(得分:2)

条件n-- != 0表示“在递减之前检查n不等于零;检查后将n设置为n-1。”

这意味着当n在循环之前等于某个数字K时,循环将重复K次。

答案 1 :(得分:2)

while (n-- != 0) { // checks  (n != 0) then n = n-1;
     if (searchMe.charAt(j++) != substring.charAt(k++)) {
            continue test;
     }
}

这个n--将会递减,首先会检查条件,然后将n的值减少1。

假设n的值为10.然后首先检查条件,
if(10 != 0)之后,它将减少到9。

答案 2 :(得分:0)

在你的代码中你写了:

 while (n-- != 0) {
       if (searchMe.charAt(j++) != substring.charAt(k++)) {
                    continue test;
        }
}

因此,如果您使用以下代码替换您的代码:

    while (n != 0) {
           n = n-1;
           if (searchMe.charAt(j++) != substring.charAt(k++)) {
                            continue test;
           }
    }

这两个代码的效果完全相同,所以我认为通过比较你可以理解它的含义。

答案 3 :(得分:0)

n--实际上是一种方法,它在后台将n的值更改为n-1,但当前返回n的实际值,因为在这种情况下它是后缀操作。

如果它是前缀操作(--n)那么是,如你所说,返回的值将是17。

基本上,n--表示取n的当前值并将其用于此行,但在此当前行之后,将值减1。在这种情况下,n的第一个值将是字符串的长度