首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查两个数组在每个位置上是否具有相同的参数,

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

Stack Overflow用户
提问于 2017-11-08 00:05:40
回答 3查看 80关注 0票数 0

我遇到了以下问题:

布尔sameStepShape(int[] a,int[] b),用于检查两个参数数组a和b是否是相同的总体形状,因为在这两个数组中,I的每个位置都有相同的分类(上、下、下、平台)。(您的方法可能假设a和b具有相同的长度。)

代码语言:javascript
复制
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被归类为:如果ai < ai + 1,则为上一步;如果ai > ai + 1,则为下降步骤;如果ai == ai + 1,则为平台。数组的最后一个位置没有这种分类,因为没有可以与其值进行比较的后续元素。”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-14 01:14:45

我很久以前就知道了,但我想我应该把解决方案发到这里,让大家看看。

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2017-11-08 00:36:13

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

代码语言:javascript
复制
    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:

代码语言:javascript
复制
if(a[i] < a[i+1] && b[i] < b[i+1]){
    return sameStep;
}

但是,如果其中任何一个值不相等,则需要以另一种方式返回false:

代码语言:javascript
复制
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并不意味着数组是相等的。

票数 0
EN

Stack Overflow用户

发布于 2017-11-08 00:13:54

试一试这个

代码语言:javascript
复制
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;
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47169445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档