1重写一个方法,我写的代码
public class ArrayTest3
{
public static boolean t(int[] a, int[] b)
   {   
if(a.length == b.length)
{
for(int i = 0; i < a.length; i++)
{

boolean result = a[i] == b[i]?true:false;


   return result;
    
    }

}
          
    else
{

      return false;
    }
    
     
   }public static void main(String[] args)
{


int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
t(a, b);
  System.out.println(a.equals(b));

     }
}
编译都不能通过,我百思不得其解,为什么?
我知道正确的是
import java.util.Arrays;public class ArrayEqualsTest
{
// compare the content of two arrays
public static boolean isEquals(int[] a, int[] b)
{
if(a == null || b == null)
{
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;
}


public static void main(String[] args)
{
int[] a = {1, 2, 3};
int[] b = {1, 2, 3}; System.out.println(isEquals(a, b));
System.out.println("----------"); System.out.println(Arrays.equals(a, b));
}
}
这个我能看懂,但我觉得这样排除法可以,那可不可以不用这种排除法,我以上的代码时错误的,错在哪?正确的是怎么样的代码?
2
int[][][] a = new int[2][3][4];
                                    System.out.println(a[0] instanceof int[][]);
         System.out.println(a[0][0] instanceof int[]);
我看懵了,这a[0]不是表示这个三维数组的第一行吗?怎么一下子变成一个二维数组的实例了?
下面一行,a[0][0]不是这个三维数组的第一行第一列吗?怎么一下子变成一个数组的实例了?
问题很琐碎,百度不到,望高手解答,谢谢!

解决方案 »

  1.   

    1重写一个方法,我写的代码
    —— 这个主要问题是你t(int[] a, int[] b)函数中有遗漏return的分支,所以编译器不让你通过;
    —— 建议把else删除掉,直接写 return false;
    这a[0]不是表示这个三维数组的第一行吗?怎么一下子变成一个二维数组的实例了?
    —— a 是个三维数组,所以很自然的:
    —— a[0] 是个二维数组,a[0][0] 是个一维数组,a[0][0][0] 是个int元素;
      

  2.   

    改了改 t(int[] a, int[] b),参考下: public static boolean t(int[] a, int[] b)
    {
    boolean result=false;                         //定义一变量。
    if(a.length == b.length)
    {
    result=true;
    for(int i = 0; i < a.length; i++)
    {
    //result = a[i] == b[i]?true:false;
    if(a[i]!=b[i])
    {
    result=false;
    break;
    }
    }
    }
    return result;
    }
      

  3.   

    第一个问题:boolean result = a[i] == b[i]?true:false  这句话好复杂呀 直接return 
    a[i] == b[i]?true:false  不行吗; t(a,b)是有返回值的,boolean b = t(a,b);...println(b)就好了吧,逻辑问题的话自己再好好想想
    第二个问题:你先明白什么是实例再说吧 
      

  4.   

    第一个问题按照您说的该,可是还是编译通不过,提示缺少返回语句。
    第二个问题,所谓P p = new P();就是有三层意思,第一是调用P的构造方法,第二是在内存里面生成一个空间,第三是把这个空间的地址赋给引用类型的变量p,可是数组int[][][] a = new int[2][3][4];并没有生成一个内存空间啊,三维数组不是三个引用类型吗?并没有占用内存空间啊?而instancsof是判断前者是否为后者的实例啊?这是这么回事,万望明示啊,大哥,不要打哑谜了,我本来就很痛苦,这问题解决不了,后面问题越积越多啊?
      

  5.   

    public static boolean t(int[] a, int[] b) {
        if (a.length == b.length) {
            for (int i = 0; i < a.length; i++) {
                boolean result = a[i] == b[i] ? true : false;
                return result;
            }
        } else {
            return false;
        }
    }t() 方法是有问题的:
    1、循环当中只判断了一次就退出了,所以不妨改为:return a[0] == b[0];
    2、当 a[] 和 b[] 长度都为 0 的情况下,方法没有可执行的返回语句,所以编译不通过。
      

  6.   

        
    if(a.length == b.length)
     {
    boolean result = false;
     for(int i = 0; i < a.length; i++)
     {  result = a[i] == b[i]?true:false;
     return result;
       
    }
    return result; }
       
    else
     { return false;
     }
      

  7.   


    问题1:
    public class ArrayTest3
    { static boolean result;
    public static boolean t(int[] a, int[] b) {
    if(a.length == b.length) {
    for(int i = 0; i < a.length; i++) { result = (a[i] == b[i])?true:false;
    }
    return result; //你的返回值boolean 应该放在if中,而不是for里面(if会看不到)
    }else { return false;
    }
        
        
    } public static void main(String[] args) {
    int[] a = {1, 2, 3};
    int[] b = {1, 2, 3};
    System.out.println(t(a, b));  //这样答应应该是 你的需求.
    System.out.println(a.equals(b));
      }
    }
    问题2很容易理解哈,
    一行肯定是一个队伍的实例吧,
    一块肯定是一行的实例吧,
    例如:
    Object obj = new Object()
    obj就是类Object的一个实例,也就是一个具体的对象