你好,我很难完成这项任务。有人可以让我知道为什么我的第5号测试在假设是假的时候仍然是真的。感谢。
这就是问题。
Arrays - has12& linearIn
给定一个int数组,如果数组中有一个1,并且数组后面有一个2,则返回true。
给定两个以递增顺序排序的整数数组,外部和内部,如果内部的所有数字都出现在外部,则返回true。最佳解决方案只对两个数组进行单个“线性”传递,利用两个数组已按排序顺序排列的事实。
这是我的输出/问题
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;
}
}
答案 0 :(得分:3)
问题出现在这一点上:
if (outer[j] == inner[i]) return true;
如果有任何匹配,则函数返回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;
}