Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Симметричная разность


Автор: ElectricalStorm 26.2.2004, 13:49
Подскажите как реализовать симметричную разность двух массивов ?

Автор: Paradox 26.2.2004, 13:58
а это что такое? напомни

Автор: ElectricalStorm 26.2.2004, 14:27
есть массивы
A = {1, 2, 3}
B = {1, 2, 4}
результирующий массив должен содержать C = {3, 4} тоесть
C = (A - B)+ (B- A)



Автор: DarkDS 26.2.2004, 15:45
Для массивов объектов можно так:
Код

public Object[] r( Object[] first, Object[] second )
{
 ArrayList list = new ArrayList();
 for( int i=0; i < first.length; list.add( first[i++] ) );
 for( int i=0; i < second.length; list.remove( second[i++] ) );
 return list.toArray();
}

Автор: ElectricalStorm 26.2.2004, 16:26
DarkDS это у Вас не симметричная получилось

Автор: AntonSaburov 26.2.2004, 16:27
Только надо еще добавить те элементы, которых нет в first и они есть в second.

Автор: ElectricalStorm 26.2.2004, 22:43
не понимаю sad.gif
может кто-нибудь "на пальцах" или псевдокодом расписать алгоритм

Автор: Kurt 27.2.2004, 04:12
Вот тебе готовый код.
Корявый, правда - там количество элементов жестко задано, инициализация массивов явно в извращенном виде, но основная мысль, я надеюсь, понятна..
Просто сейчас 4 часа ночи и голова не работает на должном уровне. smile.gif
Итак:
Код

import java.util.*;
class SimmArr{

public static void main(String[] s){
       // заполнение массивов:
       Integer[] A = new Integer[3];    
A[0] = new Integer(1);
       A[1] = new Integer(2);
       A[2] = new Integer(3);
Integer[] B = new Integer[3];    
B[0] = new Integer(1);
       B[1] = new Integer(2);
       B[2] = new Integer(4);
ArrayList A_B = new ArrayList();
       ArrayList B_A = new ArrayList();
       //получаем элементы, к-е есть в массиве А, не нет в массиве В:
for (int i=0; i<3; i++){
 A_B.add(A[i]);
};
for (int i=0; i<3; i++){
 A_B.remove(B[i]);
};
       //получаем элементы, к-е есть в массиве В, не нет в массиве А:
for (int i=0; i<3; i++){
 B_A.add(B[i]);
};
for (int i=0; i<3; i++){
 B_A.remove(A[i]);
};

       //составляем массив (здесь используется А_В), в к-м СУММА массивов А_В и В_А (т.е добавляем элементы, к-е есть во 2-м массиве, но нет в превом)
for (int i=0; i<B_A.size(); i++){
           if (!A_B.contains(B_A.get(i))){
               A_B.add(B_A.get(i));
           }
               
           }
       System.out.println(A_B.toString());
       return;
       };

}


Вот что происходит с людьми после 4-х.. smile.gif
Я тут использовал Integer - чисто для примера..
Помогло? smile.gif


Автор: ElectricalStorm 27.2.2004, 11:42
спасибо !! Все оказалось довольно просто !! что -то вчера голова вообще не хотела думать ! smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)