Нахождение пересечения двух массивов [закрыто]

Моя цель - выяснить значения пересечений массивов a и b и сохранить их в новом массиве c, чтобы распечатка была: 3,10,4,8. Как назначить данные значения в 3-й массив с?

 public static void main(String[] args) {
        int a[] = {3, 10, 4, 2, 8};
        int[] b = {10, 4, 12, 3, 23, 1, 8};
        int[] c;
        int i=0;
         for(int f=0;f<a.length;f++){
              for(int k=0;k<b.length;k++){
                    if(a[f]==b[k]){
 //here should be a line that stores equal values of 2 arrays(a,b) into array c
            }
          }
        }
            for (int x=0; x<c.length; x++){
             System.out.println(c[i]);
            }
       }
  }
 CBredlow16 окт. 2012 г., 18:29
у вас есть код прямо здесь, и i (ndex), который начинается с 0, который не используется.
 user16639016 окт. 2012 г., 18:26
Если это не домашняя работа, которая строго требует массива ickies, см.Set Интерфейс - немного сложнее, если требуется обслуживание oder, но не очень.
 Sajan Chandran16 окт. 2012 г., 18:32

Ответы на вопрос(5)

используйте ArrayList для c, его растущий массив

ArrayList c = new ArrayList();
.
.
.
.
.
c.add(a[f]);

Также, сортировать массивы, я рекомендую вам отсортировать меньший массив, а затем выполнить итерацию по большому массиву и выполнить двоичный поиск в меньшем массиве.

 Code-Apprentice16 окт. 2012 г., 18:30
Я думаю, вы должны уточнить, что это хорошее решение, если оно разрешено. Насколько нам известно, в проекте ОП могут быть некоторые ограничения, которые не позволяют использовать ArrayList.
 Alexandr Melnik16 окт. 2012 г., 18:44
Спасибо. Я уверен, что это будет делать то, что мне нужно, но я еще не знаком с ArrayLists.

в основном, изобретение колеса, если вы не обязаны это делать) -

int[] c = new int[0];
//...
    if(a[f] == b[k]) { 
        int[] temp = c;
        c = new int[c.length + 1];
        for(int i=0; i<temp.length; i++) {
            c[i] = temp[i];
        }
        c[c.length - 1] = a[f];
    }
//...
 Bhesh Gurung16 окт. 2012 г., 19:40
Добро пожаловать. :)
 Alexandr Melnik16 окт. 2012 г., 19:32
пока оба пути верны, я могу предпочесть любой из них :) спасибо

Это должен быть простой способ сделать.

int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
List<Integer> aList =  Arrays.asList(a);
List<Integer> bList =  Arrays.asList(b);
aList.retainAll(bList);
System.out.println(" a intersection b "+aList);
int[] c = aList.toArray(new int[0]);
 Sotirios Delimanolis28 окт. 2015 г., 21:51
Это не компилируется. Во-первых, из-заArrays.asList возвращаяList<int[], Два,toArray никогда не сможет получить массив примитивного типа. Дженерики не работают с примитивами.
 Alexandr Melnik16 окт. 2012 г., 18:41
Спасибо. Я уверен, что это будет делать то, что мне нужно, но я еще не знаком с ArrayLists.

int[] c = new int[SOME_SIZE];

Трудная часть выяснить, сколькоSOME_SIZE должно быть. Так как вы вычисляете пересечение, самое большее это может быть размер наименьшего изa а такжеb.

Наконец, чтобы назначить элемент в массиве, вы просто делаете

c[idx] = a[f]

Теперь вам нужно отслеживать, гдеidx идет. Я предлагаю начать сidx = 0 и увеличивая его каждый раз, когда вы найдете новый элемент, чтобы добавить кc.

 Alexandr Melnik16 окт. 2012 г., 18:42
Это сбивает с толку для начинающего. Но спасибо :)
 Code-Apprentice16 окт. 2012 г., 18:47
@AlexandrMelnik Если вы запутались, я предлагаю вам попробовать написать программу, которая копирует один массив в другой. Если у вас все еще есть проблемы с использованием массивов в этой более простой программе, вам следует прочитать о них больше и вернуться с некоторыми конкретными вопросами для уточнения.
public static void main(String[] args) {
        int a[] = {3, 10, 4, 2, 8};
        int[] b = {10, 4, 12, 3, 23, 1, 8};
        int[] c = new int[(int)Math.min(a.length, b.length)];
        int i=0;
         for(int f=0;f<a.length;f++){
              for(int k=0;k<b.length;k++){
                    if(a[f]==b[k]){
                    c[i] = a[f];
                    i++;
            }
          }
        }
        for (int x=0; x<i; x++){
           System.out.println(c[x]);
        }
       }
  }

это поможет. Или, если у вас есть проблемы со временем, попробуйтеJava Set.

Ваш ответ на вопрос