Java сравнение данных массива независимо от размера или порядка

1

Я пишу базовую программу для сравнения данных в двух массивах. Порядок не имеет значения и не повторяется. В настоящее время вывод показывает, что данные массива одинаковы. Это не то, что я хочу, так как данные массива разные. Это код, который у меня есть прямо сейчас:

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.");
                }
}
}
Теги:
arrays

4 ответа

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 :)

В качестве дополнительной заметки я хотел бы указать, что вам не нужно указывать if (match == false) в вашем предложении else... потому что если мы введем это else, это уже означает, что match != true (т.е.: match == false).

Ура!

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");
    }
}
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 части, если совпадение неверно, тогда оно должно быть ложным, поэтому говорить else if(match == false) непрозрачно. Вам нужно только сказать else.

Вот что должно быть с изменениями, которые я сделал:

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

Существует подход, который вы можете использовать в библиотеке. Collections.indexOfSubList (источник списка, целевой список)

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню