数组数据的Java比较,无论大小或顺序如何

时间:2014-03-19 01:00:04

标签: java arrays

我正在编写一个基本程序来比较两个数组中的数据。订单并不重要,也没有重复的数字。输出当前表示阵列数据是相同的。由于阵列数据不同,这不是我想要发生的。这是我现在的代码:

public class Algorithm1{
public static void main (String[] args){

    int[] array1 = {1, 2, 3};
    int[] array2 = {1, 2, 3, 4, 5, 6};
    int matchCount = 0;
    boolean match = false;

for(int j = 0; j < array1.length;j++)   {
    for(int i = 0; i < array2.length;i++){
if(array1[j] == array2[i])
    matchCount++;


    }
}
if(matchCount >= array1.length && matchCount >= array2.length)
    match = true;

if(match = true){
    System.out.println("The data in the arrays is the same.");
                }
else if(match = false){
    System.out.println("The data in the arrays is different.");
                }
}
}

4 个答案:

答案 0 :(得分:0)

只需将if(match = true)替换为if(match == true),或者更简单,if(match),您应该没事;)

您写道:

if(match = true) {
    System.out.println("The data in the arrays is the same.");
}

实际上if(match = true)

  • match设置为true
  • 测试前一个表达式是否为true ...并输入if:)

作为旁注,我想指出您不需要在else子句中指定if(match == false)...因为如果我们输入{{1 }},它已经意味着else(即:match != true)。

干杯!

答案 1 :(得分:0)

这是一个相当简单的错误,许多开始的程序员都会这样做。比较两个对象时,使用==,设置时使用=

而不是:

if(match = true){
    System.out.println("The data in the arrays is the same.");   
}
else if(match = false){
    System.out.println("The data in the arrays is different.");
}

应该是:

if(match == true){
    System.out.println("The data in the arrays is the same.");   
}
else if(match == false){
    System.out.println("The data in the arrays is different.");
}

嗯,实际上,它非常多余。说if(match == true)就像说if(match)一样,无论怎样,在else部分,如果匹配不成立,那么它必须是假的,所以说{{1}是无关紧要的。您只需要说else if(match == false)

以下是我所做的修订应该是什么:

else

答案 2 :(得分:0)

您可以在库中使用一种方法。 Collections.indexOfSubList(List source, List target

public int findArray(Integer[] arg1, Integer[] arg2)
{
    return Collections.indexOfSubList(Arrays.asList(arg1), Arrays.asList(arg2));
}

答案 3 :(得分:0)

尝试使用此代码,如果您需要更多解释,请告知我们

O(nlogn)运行时如果您感兴趣:)如果您使用哈希或集合...它将是O(n)但空间复杂度更高

import java.io.*;
import java.util.Arrays;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] array1 = {1, 2, 3, 6, 5, 4, 3};
        int[] array2 = {1, 2, 3, 4, 5, 6, 4, 4,6};
        java.util.Arrays.sort(array1);
        java.util.Arrays.sort(array2);
        boolean match = true;
        int ptr1 = 0;
        int ptr2 = 0;
        while(ptr1<array1.length && ptr2<array2.length && array1[ptr1]==array2[ptr2])
        {

            ptr1++;ptr2++;
            while(ptr1<array1.length && array1[ptr1]==array1[ptr1-1])
            {
                ptr1++;
            }
            while(ptr2<array2.length && array2[ptr2]==array2[ptr2-1])
            {
                ptr2++;
            }
        }
        if((ptr1 == array1.length) && (ptr2 == array2.length))
            System.out.println("The data in the arrays is the same");
        else
            System.out.println("The data in the arrays is the different");
    }
}