2015-01-20 2 views
0

Это не дубликата вопрос - я не хочу использовать pre-defined methods, и вместо этого хотел бы реализовать мои собственные основные O (N^2) алгоритма для нахождения общего элементов в 2 списках. Моя программа проходит через 2 arrays и сравнивает каждый элемент с первого array со всеми элементами со второго array. Это все работает нормально, за исключением того, что как-то в конце программа всегда печатает «0». Почему это? В моем arrays нет 0.Ошибка в Java Common Element Searcher

public class ArraySameCase { 
    public static void main(String[] args) 
    { 
     int[] firstArray = new int[5]; 
     firstArray[0] = 1; 
     firstArray[1] = 2; 
     firstArray[2] = 7; 
     firstArray[3] = 9; 
     int[] secondArray = new int[5]; 
     secondArray[0] = 8; 
     secondArray[1] = 7; 
     secondArray[2] = 1; 
     secondArray[3] = 3; 
     for(int i=0; i<firstArray.length; i++){ 
      for(int y=0; y<secondArray.length; y++){ 
       if(firstArray[i] == secondArray[y]){ 
        System.out.println(firstArray[i]); 
       } 
      } 
     } 
    } 
} 

Выход:

+0

BTW Вы можете легко реализовать алгоритм O (N log N) или даже O (N). –

+0

Я предлагаю вам использовать 'System.out.println (Arrays.toString (firstArray))', чтобы увидеть его содержимое или использовать ваш отладчик. –

+1

@PeterLawrey Как O (N) возможно? Вы имеете в виду использование HashSet <>? –

ответ

2

определяются массивы с lengt 5, но вы только добавить 4 значения. Таким образом, firstArray[4] и secondArray[4] равно 0.

4

У вас есть массивы размером 5 и intitalize только первые четыре элемента. По умолчанию значение равно 0.

Используйте следующий код, чтобы напечатать массивы утешать:

import java.util.Arrays; 

public class ArrayPrinter { 
    public static void main(String[] args) 
    { 
     int[] firstArray = new int[5]; 
     firstArray[0] = 1; 
     firstArray[1] = 2; 
     firstArray[2] = 7; 
     firstArray[3] = 9; 

     int[] secondArray = new int[5]; 
     secondArray[0] = 8; 
     secondArray[1] = 7; 
     secondArray[2] = 1; 
     secondArray[3] = 3; 

     System.out.println(Arrays.toString(firstArray)); 
     System.out.println(Arrays.toString(secondArray)); 
    } 
} 
+0

Когда вы вызываете System.out.println (firstArray), не будет ли вызов метода toString массива? – committedandroider

Смежные вопросы