如何检查两个数组在每个位置是否具有相同的参数,i

时间:2017-11-08 00:05:40

标签: java arrays loops boolean

我遇到以下问题:

boolean sameStepShape(int [] a,int [] b)检查两个参数数组a和b是否是相同的整体形状,因为每个位置i在两个数组中具有相同的分类(上级,下级或平台) 。 (您的方法可能假设a和b具有相同的长度。)

public boolean sameStepShape(int[] a, int[] b) {
boolean sameStep = true;

for (int i = 0; i < a.length - 1; i++) {
    if(a[i] < a[i+1] && b[i] < b[i+1]){
        return sameStep;
    }
    else if(a[i] > a[i+1] && b[i] > b[i+1]) {
        return sameStep;
    }
    else if(a[i] == a[i+1] && b[i] == b[i+1]) {
        return sameStep;
    }        
} 
return sameStep = false;
}

但是,这段代码没有通过测试类,我不太清楚为什么。我有点难过。如果有人可以提供任何意见,我们将不胜感激。

编辑:道歉,我忘了提供这条信息:

“基于某个数组位置i中的值如何与其后继位置i + 1中的值进行比较,如果a [i]&lt; a [i + 1],则数组a中的每个位置i被分类为上升步],如果a [i]> a [i + 1]则下降,如果a [i] == a [i + 1]则下降。数组的最后位置没有这样的分类,因为没有我们可以将其价值与其进行比较的后继元素。“

3 个答案:

答案 0 :(得分:0)

您可以将其分解为两个问题,创建一个步骤数组以确定值是上升还是下降,然后确定步骤数组是否相等:

    public static void main(String args[]){
    int[] a1 = {1, 2, 3, 4, 9, 8};
    int[] a2 = {1, 2, 3, 5, 9, 7};

    char[] s1 = getStepArray(a1);
    char[] s2 = getStepArray(a2);

    System.out.println(isEqual(s1, s2));
}

public static char[] getStepArray(int[] arr){

    char[] stepArr = new char[arr.length-1];

    for (int i = 0; i < arr.length - 1; i++) {
        if(arr[i] < arr[i+1]){
            stepArr[i] = 'd';
        }
        else if(arr[i] > arr[i+1]) {
            stepArr[i] = 'u';
        }
        else if(arr[i] == arr[i+1]) {
            stepArr[i] = 'p';
        }        
    }

    return stepArr;
}

public static boolean isEqual(char[] arr1, char[] arr2){
    for(int i = 0; i < arr1.length; i++){
        if(arr1[i] != arr2[i]){
            return false;
        }
    }
    return true;
}

现在你的代码无效,因为如果任何值相等,你会立即返回true:

if(a[i] < a[i+1] && b[i] < b[i+1]){
    return sameStep;
}

但是你想以另一种方式去做,如果任何值不相等则返回false:

if((a[i] < a[i+1]) != (b[i] < b[i+1])){
    return false; //return false here since they are not the same
}

与其他if语句相同。由于只有一个值为false意味着数组不相等,但只有一个值为true并不意味着数组相等。

答案 1 :(得分:0)

我刚才想到了这一点,但我想我会在这里发布解决方案,供所有人查看。

public boolean sameStepShape(int[] a, int[] b) {
boolean sameStep = false;

for (int i = 0; i < a.length - 1; i++) {
    if((a[i] < a[i+1]) && (b[i] >= b[i+1])){
        return sameStep;
    }
    else if((a[i] > a[i+1]) && (b[i] <= b[i+1])) {
        return sameStep;
    }
    else if((a[i] == a[i+1] && b[i] != b[i+1])) {
        return sameStep;
    }        
} 
return sameStep = true;
}

答案 2 :(得分:-2)

试试这个

public sameStepShape(int[] array1, int[] array2) {
    if (array1.length != array2.length)
        return false;
    for (int i = 0; i < array1.length; i++)
        if (array1[i] != array2[i])
            return false;
    return true;
}