java方法和数组

时间:2017-03-25 20:30:17

标签: java arrays

你好,我很难完成这项任务。有人可以让我知道为什么我的第5号测试在假设是假的时候仍然是真的。感谢。

这就是问题。

Arrays - has12& linearIn

  1. 给定一个int数组,如果数组中有一个1,并且数组后面有一个2,则返回true。

  2. 给定两个以递增顺序排序的整数数组,外部和内部,如果内部的所有数字都出现在外部,则返回true。最佳解决方案只对两个数组进行单个“线性”传递,利用两个数组已按排序顺序排列的事实。

  3. 这是我的输出/问题

    Test 1: true
    Test 2: true
    Test 3: false
    Test 4: true
    Test 5: true//needs to be false
    Test 6: true
    

    这是我的代码

    public class Problems {
     public static void main(String[] args) {
      int[] a = {1,3,2};
      int[] b = {3,1,2};
      int[] c = {3,1,4,5};
      int[] d = {1,2,4,6};
      int[] e = {1,2,4,4,6};
      int[] f = {2,4};
      int[] g = {2,3,4};
    
      boolean test1 = has12(a);
      boolean test2 = has12(b);
      boolean test3 = has12(c);
    
      System.out.println("Test 1: " + test1); //should print true
      System.out.println("Test 2: " + test2); //should print true
      System.out.println("Test 3: " + test3); //should print false
      System.out.println("Test 4: " + linearIn(d, f)); //should print true
      System.out.println("Test 5: " + linearIn(d, g)); //should print false
      System.out.println("Test 6: " + linearIn(e, f)); //should print true
    
     }
    
     //has12 method goes here
    
     public static boolean has12(int[] array) {
      int i;
      int x;
    
      for(x=0;x<array.length;x++){
          if(array[x]==1){
          }
        for(i=x+1;i<array.length;i++){
            if (array[i]==2) return true;
        }      
      }
         return false;
     }
      //linearIn method goes here
      public static boolean linearIn(int[] outer, int[] inner) {
          int i;
          int j;
       for (i = 0; i < inner.length; i++) {
        for (j =0; j < outer.length; j++) {
         if (outer[j] == inner[i]) return true;
    
       }
    
      }
          return false;
    
      }
    }
    

1 个答案:

答案 0 :(得分:3)

问题出现在这一点上:

  if (outer[j] == inner[i]) return true;

如果有任何匹配,则函数返回true,这不是你想要的东西。因为你应该检查内部数组的所有变量。

  • 你应该为每个内部变量检查isAppear boolean。
  • 如果没有匹配,您可以返回 false
  • 如果匹配,请继续检查其他变量。
  • 如果没有变量且一切都与外部匹配。您可以 返回 true

你可以试试这个:

public static boolean linearIn(int[] outer, int[] inner) {
    boolean isAppear;
    for (int i = 0; i < inner.length; i++) {
        isAppear = false;
        for (int j = 0; j < outer.length; j++) {
            if (outer[j] == inner[i])
                isAppear = true;
        }
        if(!isAppear)
            return false;
    }
    return true;
}