如何只从for循环中打印一次语句 - Java

时间:2018-03-02 12:45:44

标签: java for-loop

iv得到一个循环,检查两个数组中的值。如果找到匹配值,则将这些值打印到控制台。

我还提供了一个打印声明,只有在任何地方找不到匹配项时才打印。

public class MatchTest 
{
   public static void main(String []args)
{
          boolean matchFound=true;
          int [] x = {4,5,6,1,2};
          int [] y = {1,2,3};


          getMatchingNumbers(x,y, matchfound);

}
//method to check numbers in each array and prints the numbers that match ( if found)
   public static void getMatchingNumbers(int [] a, int []b, boolean c)
   {

          for(int i : a)
          {
          for (int j : b)
            {
             if (i==j) 
              System.out.println("matching numbers are " + i);
             else 
               c = false;
             }
          }
// how do i get this to print ONLY if no matches are found any where
          if (c == false)  
          System.out.println("no matches found");   
      }
}        

目前,如果传入的数组包含一些匹配的数字和一些不匹配的数字,我仍然得到没有匹配的消息。而不是这个,我希望没有匹配发现只有在任何地方都没有匹配的情况下才能打印消息。

我认为这应该是一个简单的修正,但我不知道我哪里出错了。

建议表示赞赏。

4 个答案:

答案 0 :(得分:2)

您将c设置为false,并且仅在数字匹配时将其设置为true

public static void getMatchingNumbers(int [] a, int []b, boolean c){
        c = false;
        for(int i : a){
            for (int j : b){
                if (i==j){
                    System.out.println("matching numbers are " + i);
                    c = true;
                }
            }
        }
        if (!c)  System.out.println("no matches found");
    }

所以你找到了所有比赛。

当您在if语句中返回时:

if(i==j){
    System.out.println("matching numbers are " + i);
    return;
}

你只找到第一场比赛。

答案 1 :(得分:1)

你只需要在开始时将boolean matchFound设置为false。然后在方法getMatchingNumbers中,将c = true添加到if(i == j)块。删除不需要的else块。

public class MatchTest {
   public static void main(String []args){
          boolean matchFound=false;//set this to FALSE at beginning
          int [] x = {4,5,6,1,2};
          int [] y = {1,2,3};


          getMatchingNumbers(x,y, matchfound);

}
//method to check numbers in each array and prints a the numbers that match ( if found)
   public static void getMatchingNumbers(int [] a, int []b, boolean c){

          for(int i : a){
          for (int j : b){
//Modified the if block and removed the else block
          if (i==j){
              System.out.println("matching numbers are " + i);
              c=true;
          }

          }
   }

          if (c == false)  System.out.println("no matches found");


          }
}    

答案 2 :(得分:0)

public class MatchTest {



  public static void main(String[] args) {
     boolean matchFound = false;
     int[] x = {
                4,
                5,
                6,
                1,
                2
                  };
    int[] y = {
                1,
                2,
                3
                  };


    getMatchingNumbers(x, y, matchFound);

 }
    //method to check numbers in each array and prints a the numbers that      match ( if found)
 public static void getMatchingNumbers(int[] a, int[] b, boolean c) {


   for (int i: a) {
      for (int j: b) {

         if (i == j) {
             System.out.println("matching numbers are " + i);
             c = true;
         }

      }
   }
   // how do i get this to print ONLY if no matches are found any where
   if (!c) System.out.println("no matches found");


   }
}`

我在代码中做了很小的改动。你的代码是糟糕的编码风格。为什么你传递一个布尔函数?没必要 在Java中,您将boolean c传递给method.Actually它在方法内部创建局部变量boolean c并复制传递的值。

答案 3 :(得分:0)

执行此操作,我确信您的代码可以在没有任何问题的情况下运行

public static void getMatchingNumbers(int [] a, int []b, boolean c)
{
      int flag=0;
      for(int i : a)
      {
        for (int j : b)
            {
                if (i==j) 
               {
                    System.out.println("matching numbers are " + i);
                    c=false;//will turn c==false every time if a match is found
                }
            }
    }
       // change your code like this
      if (c)  
        System.out.println("no matches found");
  }