Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使for循环在到达数组末尾之前不显示消息_Java_Arrays_For Loop - Fatal编程技术网

Java 如何使for循环在到达数组末尾之前不显示消息

Java 如何使for循环在到达数组末尾之前不显示消息,java,arrays,for-loop,Java,Arrays,For Loop,如何使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

如何使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;
for(int j=0;j=20000000&&logic.rez[j]<23000000){
这样做;
打破
}否则{
if(logic.rez.length==j){
追加(“错误消息\n”);
}
}
打破

我尝试在循环之前将布尔matchFound设置为false,如果发现了什么,则将其设置为true,如果在循环之后为false但没有运气,则打印错误消息。我需要一些条件,只有在循环结束数组后才会更改。rez.length==j将永远不会发生,因为您的循环只进行
length-1
(这就是小于符号的工作原理)。我想你可以通过这样做来解决它
logic.rez.length-1==j

根据您的逻辑,当j的值等于logic.rez.length时,for循环结束

j < logic.rez.length
如果要捕获循环到达数组末尾的条件,可以-
1) 在for循环外声明变量j,并在for循环后使用上面的代码块

尽管可以在循环内检查是否已到达最后一个元素,但这并不理想。这种方法意味着每次通过循环时都要检查是否在最后一个元素上

有一种更好的方法。当控制传递给循环后面的代码时,您知道您已经到达了循环的末尾。当放置在循环之后时,您最多需要一次失败检查

对于线性搜索,有一些重复出现的模式,包括以下内容

找到匹配项时提前返回

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.
}
int搜索(Foo[]f){
对于(int i=0;i
带有布尔值的内联代码

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.
}
boolean foundMatch=false;
对于(int i=0;i
为什么不在循环后打印?
for(int j=0;j
虽然这是事实,但更好的方法是在循环后处理错误。我知道,但解释为什么它不起作用要比通过优化来解决它好。使用良好的线性搜索模式与其说是优化,不如说是避免伪化。虽然在示例代码中解决技术错误是合理的,但它指出反模式并提出备选方案可能会有所帮助,正如上一段中的OP所提到的。但当我在数组中找到需要查找值的内容时,我不需要结束循环,如果我没有找到,则打印错误message@Mapet-示例代码中的
中断将导致循环结束第一个time找到一个匹配项。如果要找到所有匹配项,请在示例代码和上面的第二个模式中,在循环中省去
break
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.
}