在以下代码中该行转换为什么?
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");
}
}
答案 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的第一个值将是字符串的长度