如何使我的for循环no显示消息,直到它到达数组的末尾。代码如下:
for (int j = 0; j < logic.rez.length; j++) {
if (logic.rez[j] >= 20000000 && logic.rez[j] < 23000000) {
do.this;
break;
} else {
if(logic.rez.length==j){
rez.append("Error message \n");
}
}
break;
我尝试在循环之前将boolean matchFound设置为false,如果找到某些内容则将其设置为true,如果在循环之后它为false则打印错误消息但没有运气。我需要一些条件,只有在之后才会更改循环使数组结束
答案 0 :(得分:1)
logic.rez.length==j
永远不会发生,因为你的循环只会转到length-1
(这就是符号的工作方式)。我认为你可以通过这样做来解决它
logic.rez.length-1==j
答案 1 :(得分:0)
根据您的逻辑,只要j的值等于logic.rez.length
,for循环就会结束import re
def tokenize(text):
return re.findall(r'[()|]|\w+', text)
def product(a, b):
return [x+y for x in a for y in b] if a and b else a or b
def parse(text):
tokens = tokenize(text)
def recurse(tokens, i):
factor = []
term = []
while i < len(tokens) and tokens[i] != ')':
token = tokens[i]
i += 1
if token == '|':
term.extend(factor)
factor = []
else:
if token == '(':
expr, i = recurse(tokens, i)
else:
expr = [token]
factor = product(factor, expr)
return term+factor, i+1
return recurse(tokens, 0)[0]
string = "(A((B|C)D|E|F))"
print(parse(string))
因此下面的代码块是多余的 -
j < logic.rez.length
如果你想捕获循环到达数组末尾的条件,你可以 - 1)在for循环外声明变量j,并在for循环
后面有上面的代码块答案 2 :(得分:0)
虽然您可以在循环内检查您是否已到达最后一个元素,但这并不理想。这种方法意味着您每次进行循环时都要检查是否在最后一个元素上。
这是一种更好的方法。当控制传递给循环后面的代码时,您知道您已到达循环的末尾。在循环之后放置时,您最多需要检查一次失败。
对于线性搜索,有一些反复出现的模式,包括以下内容。
找到匹配项时提前退货
int search( Foo[] f ) {
for ( int i = 0; i < f.length; ++i ) {
if ( matches( f[i] )) {
return i;
}
}
return -1; // Nothing matched. Caller handles error.
}
带有布尔值的内联代码
boolean foundMatch = false;
for ( int i = 0; i < f.length; ++i ) {
if ( matches( f[i] )) {
foundMatch = true;
// Handle match
break;
}
}
if ( ! foundMatch ) {
// Nothing matched. Handle error here.
}