由于 continue 而忽略了数组 for 循环中的基本 else 语句

Posted

技术标签:

【中文标题】由于 continue 而忽略了数组 for 循环中的基本 else 语句【英文标题】:Basic else statement in array for loop being neglected because of continue 【发布时间】:2015-10-22 09:43:31 【问题描述】:

我试图了解我的 else 语句是如何在这个简单的程序中没有被访问的,基本上,我想做的是循环遍历一个随机数数组,如果找到该项目,文本将显示演示它已经被发现。如果还没有找到我用继续进行下一次迭代。如果根本没有找到,那么会跳出一条语句,解释在数组中没有找到该项目。

import java.util.*;
public class practice 


      public static void main(String[] args) 

        int myA[] = new int[11];
        int toS = 59;
        Random  f = new Random();

        for(int j = 0; j < myA.length; j++)
          myA[j] = f.nextInt(10);
        

        System.out.println("The array has");
        for(int x = 0; x < myA.length; x++)
          System.out.println(myA[x]);
        
        System.out.println("Loop through elements");


        System.out.println("loop test");
        for(int u = 0; u < myA.length; u++)
            if(myA[u] == toS)
                System.out.println("Item found" );
                break;
            
            if(myA[u] != toS)
                continue;
            
            else
                System.out.println("Item not in list");
                break;
            
        // end of loop
      //After this no more code
    

我是不是想多了?我使用调试器单步执行进程,我看到 continue 语句是从循环中跳出并结束的语句,而没有传递给 else 语句。我将如何修复迭代?如果我删除 continue 块,代码只会检查第一次迭代。

谢谢你们的时间。

【问题讨论】:

循环中的逻辑没有意义。第一个if 表示if (myA[u]==toS) ... break; 。所以只有当myA[u] 不等于toS 时,迭代才能继续。很明显,else 子句永远不会触发。 【参考方案1】:

您不应在循环中使用continue

    boolean itemFound = false;
    for(int u = 0; u < myA.length; u++)
            if(myA[u] == toS)
                itemFound = true;
                break;
             
        // end of loop

    if (itemFound) 
        System.out.println("Item found" );
     else 
        System.out.println("Item not in list");
    

【讨论】:

【参考方案2】:

你的 else 语句没有被输入,因为它已经被前面的 if 语句覆盖了,它从循环中中断了:

        if(myA[u] == toS)
            System.out.println("Item found" );
            break;
        
        if(myA[u] != toS)
            continue;
        
        else // myA[u] == toS - never happens, since previous if statement broke from the loop
            System.out.println("Item not in list");
            break;
        

您的逻辑可以使用布尔变量以这种方式处理:

    boolean found = false;
    for(int u = 0; u < myA.length; u++)
        if(myA[u] == toS)
            System.out.println("Item found" );
            found = true;
            break;
        
    
    if (!found) 
        System.out.println("Item not in list");
        break;
    

请注意,只有在循环结束后,您才能检查是否找到了该项目。

【讨论】:

感谢您的精彩解释。我能够根据您的解释解决我正在处理的 gui 工具项目中使用的代码的其他部分。我陷入了数组的这个问题,无法摆脱 ti,你的例子让我有了更好的洞察力。【参考方案3】:

看下面的sn-p

  if(myA[u] == toS)
         System.out.println("Item found" );
         break;
    
   if(myA[u] != toS)
                    continue;
   

在任何可能的情况下,toS 将等于 myA[u] 或不等于它,

如果相等,则执行'break'语句并退出for循环, 如果不相等,则执行“继续”语句,因此退出正常的迭代循环

所以你的 else 循环将永远不会运行,因为没有条件 2 个 if 循环之一不会执行

希望这会有所帮助!

祝你好运!

【讨论】:

以上是关于由于 continue 而忽略了数组 for 循环中的基本 else 语句的主要内容,如果未能解决你的问题,请参考以下文章

使用continue忽略本次循环剩下语句

continue语句的作用

由于 swift 中的 for 循环而无法修改数组?

控制循环结构

for循环中break与continue的区别

BASH:在 for 循环中使用 continue