检查一个数组是否与java中的另一个数组相反

时间:2010-03-05 05:55:47

标签: java arrays

我试图创建一个方法,将2个int数组作为输入参数,如果数组是反向则返回true,否则返回false。这是我到目前为止所做的,但这是错误的。

public static void main(String[] args)
{
    int b,a;
    int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
    int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,14};
    boolean check = true;

    for (a=0;a<data1.length;a++)
    {
      for (b=data2.length-1;b>=0;b=b-1)
      {
                  if (data1[a] != data2[b])
                      check=false 
      }
    }
    System.out.println(check);
}

我的例子是假设打印为true但它没有。我假设2个数组的长度相同。有人可以帮忙吗?

7 个答案:

答案 0 :(得分:7)

你不需要两个循环 - 你只需要循环一次,使用一个数组中的“normal”索引,另一端使用另一个数组:

public static boolean checkReversed(int[] x, int[] y)
{
    // For production code, possibly add nullity checks here (see comments)
    if (x.length != y.length)
    {
        return false;
    }
    // Loop through x forwards and y backwards
    for (int i = 0; i < x.length; i++)
    {
        if (x[i] != y[y.length - 1 - i])
        {
            // As soon as we've found a "mistake" we can exit:
            // This is simpler (IMO) than keeping a "check" variable
            return false;
        }
    }
    return true;
}

答案 1 :(得分:3)

您可以尝试:

// compare the length.
check = (data1.length != data2.length)?false:true;

// if lengths are equal..go ahead and compare elements in reverse.
if(check) {    
    for(int i=0,j=data2.length;(i<data1.length) && (j>=0);i++,j--) {
        // if you find a mismatch..set check to false..and break
        // no need to compare other ele.
        if(data1[i] != data2[j]) {
            check = false;
            break;
        }
    }
}

答案 2 :(得分:2)

在这里,两个数组长度应该相等。然后

for(int i=0,j=array.length;i<array.length,j=0;i++,j--){
  write your comparison logic here
}

答案 3 :(得分:2)

您的代码实际上将data1中的每个元素与data2中的每个元素进行比较,如果存在任何一个不匹配,则打印为false。这不是你打算做的。

答案 4 :(得分:2)

这是一个完整的.java文件中你的问题的答案

//yeah.java
public class yeah {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
        int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,12};

        System.out.println(isReverse(data1, data2));
    }

    public static boolean isReverse(int[] a, int[] b)
    {
        if (a.length != b.length)   //If a and b are not of the same length how can they be reverse?
            return false;
        for (int i=0;i<a.length;i++)
            if (a[i] != b[a.length-i-1])
                return false;
        return true;
    }

}

只是关于方法和函数的快速说明..一旦发现它们没有被反转,你应该使用return语句退出..不需要继续计算..

答案 5 :(得分:1)

你可以在一个循环中完成,你不需要两个。

for (int i=0,j=end;i<end;i++,j--)

答案 6 :(得分:0)

这可以在一个循环中完成,不需要两个循环。

例如:

for (int i = 0, j = last; i < last; i++, j--)