等数组的方法

时间:2016-10-15 08:25:07

标签: java arrays methods

初学者在这里!

我正在尝试编写一个布尔方法,如果两个数组a和b在相同的顺序中具有完全相同的元素,则返回true,否则为false

虽然,我在比较两个空数组时遇到问题,我希望它在以下情况下返回true:

int [] A = { };

int [] B = { };

到目前为止我的代码是:

public static boolean equalArrays(int [] a, int [] b) {
    if(a.length == 0 && b.length == 0)
        return true;
    else {
        if(a.length == b.length)
            for(int i = 0; i < a.length ; i++)
                if (a[i] == b[i])
                    return true;
    }
   return false;
}

EDIT1:修正了上面的代码

EDIT2:另一个问题是当我尝试测试时

int [] A = {2, 3, 4, 5, 6};
int [] B = {2, 3, 4, 6, 5};

当它应该返回false时返回true。任何人都知道问题出在哪里?

5 个答案:

答案 0 :(得分:2)

问题出在你的for循环中。它应该是:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'username', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];





public function getAvatarUrl()
{
        return "http://www.gravatar.com/avatar/" . md5(strtolower(trim($this->email))) . "?d=mm&s=40";
}

}

请注意,我交换了public static boolean equalArrays(int [] a, int [] b) { if(a == b){ return true; } if(null == a || null == b){ return false; } if(a.length != b.length){ return false; } for(int i = 0; i < a.length ; i++){ if (a[i]!=b[i]){ return false; } } return true; } true的地点,现在检查false而不是!=这是因为我们希望所有元素都相等,不仅仅是其中的一小部分。

正如BackSlash评论的那样,我添加了对空

的检查

PS:你应该使用括号 - &gt;它使代码更具可读性

答案 1 :(得分:1)

请注意

int [] A = { };

是一个空数组,它是一个数组。

  

虽然,我在比较两个空数组时遇到问题

你可以这样做:

if(a == null && b == null) {
    // both arrays are null
    return true;
}

if(a == null || b == null) {
    // one of the two arrays is null, they are not equal
    return false;
}

if(a.length == 0 && b.length == 0) {
    // Both arrays are empty, they are equal
    return true;
}

答案 2 :(得分:1)

来自Arrays.equals

public static boolean equals(int[] a, int[] a2) {
    if (a==a2)
        return true;
    if (a==null || a2==null)
        return false;

    int length = a.length;
    if (a2.length != length)
        return false;

    for (int i=0; i<length; i++)
        if (a[i] != a2[i])
            return false;

    return true;
}

在迭代两个数组中的每个元素之前,最好先进行基本长度的空检查

答案 3 :(得分:0)

public static boolean equalArrays(int [] a, int [] b) {
    if(a.length == 0 && b.length == 0)
     return true
    else {
     if(a.length == b.length){
        for(int i = 0; i < a.length ; i++){
            if(a[i]!=b[i]) 
             return false; 
        }
     } else return false;

    }
   return true;
}

请使用此代码谢谢:)我已经检查过两个数组是否为空

答案 4 :(得分:0)

你可以尝试这样的事情......

  public static boolean comparearr(int a[] ,int b[])
    {
     if(a.length!=b.length)
     {
        return false;
     }
      else 
       {
         for(int i=0;i<a.length;i++)
         {
           if(a[i]!=b[i])
           return false;
         }
       }
     return true;
   }  

注意: 当你说

int a[]={1,2,3};
and int b[]={};

在第一种情况下a是一个用1,2,3初始化的数组,所以length属性将产生length = 3但是在b的情况下,它将被设置为0,因为它的非空数组由于{}定义

,它只是长数为0的空数组