2017-02-11 3 views
1

Я только начал изучать java. Я пытаюсь написать программу, чтобы найти три элемента из трех разных массивов, таких как a + b + c = sum. (Я избегаю использовать три для петель, чтобы сделать его более эффективным)Как сохранить одно значение за раз в хэш-таблицу.

Я получаю следующее сообщение об ошибке.

10: error: cannot find symbol 
     HashMap<int> s = new HashMap<int>(); 
    ^
    class HashMap 
class YesorNo 

Это мой код:

class YesorNo 
    { 
     // Function to check if there is an element from 
     // each array such that sum of the three elements 
     // is equal to given sum. 
     boolean findTriplet(int a1[], int a2[], int a3[], 
       int n1, int n2, int n3, int sum) 
     { 
     // Store elements of first array in hash table 
      HashMap<int> s = new HashMap<int>(); 
      //unordered_set <int> s; 
      for (int i=0; i<n1; i++) 
      s.add(a1[i]); 

      // sum last two arrays element one by one 
      for (int i=0; i<n2; i++) 
      { 
       for (int j=0; j<n3; j++) 
       { 
       // Consider current pair and find if there 
       // is an element in a1[] such that these 
       // three form a required triplet 
       if (s.find(sum - a2[i] - a3[j]) != s.end()) 
        return true; 
       } 
      } 
      return false; 
     } 

     // Driver Code 
     public static void main(String[] args) 
     { 
      YesorNo check = new YesorNo(); 
      int a1[] = { 1 , 2 , 3 , 4 , 5 }; 
      int n1 = a1.length; 
      int a2[] = { 2 , 3 , 6 , 1 , 2 }; 
      int n2 = a2.length; 
      int a3[] = { 3 , 2 , 4 , 5 , 6 }; 
      int n3 = a3.length; 
      int sum=9; 

      System.out.println(check.findTriplet(a1, a2, a3, n1, n2, n3, sum)); 
     } 
    } 
+1

Также у вас есть необходимый импорт в вашей программе? – opensam

+1

Используйте это, чтобы найти нужную коллекцию: http://www.sergiy.ca/img/doc/java-map-collection-cheat-sheet.gif для списка значений (например, массив, но без ограничения): List - > ArrayList ..., Map -> HashMap .. if for pairs azro

ответ

0

HashMap не один размер сбора и она не может содержать примитивные типы, такие как «Int», как @Pshemo упомянуто в комментариях. Вы должны указать ключ и значения, сопоставленные этому ключу. Для получения дополнительной информации см. this tutorial.

Чтобы вставить значения в HashMap,

HashMap<Integer, Integer> s = new HashMap<Integer, Integer>(); 
for (int i=0; i<n1; i++) 
     s.put(i, a1[i]); 

В качестве альтернативы для s.find, вы можете использовать

s.containsValue 

Но вы не можете перейти к концу HashMap, как вы написали с. конец. Вы должны следовать некоторым твикам, упомянутым here.

3

Используйте HashSet, и это должно быть Integer (так как вы не можете использовать примитивы как родовые типы с коллекциями и предпочитают интерфейс).

Set<Integer> s = new HashSet<>(); 
+2

«вы не можете использовать примитивы с коллекциями», то есть мы не можем использовать примитивы как * общие типы *. Мы можем использовать примитивы с коллекциями: 's.add (1)' отлично развивает благодаря автобиксированию :) – Pshemo

+0

@Pshemo Да. Да, я имею в виду это. :) –