初学者在这里!
我正在尝试编写一个布尔方法,如果两个数组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。任何人都知道问题出在哪里?
答案 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,因为它的非空数组由于{}
定义