2014-02-05 3 views
1

У меня есть Loop, который ищет словарь, извлекает слова, которые я отфильтровал, а затем помещает их в массивList. Затем я хочу уточнить свой поиск и извлечь слова из этого списка arrayList и поместить его в другой. Есть ли способ генерации arrayList? часто то, что я пытаюсь сделать, я, возможно, не знаю точно, сколько массивов мне может понадобиться.Как автоматически создать arraylist?

У меня есть клавиатура мобильного телефона с 3-4 буквами, назначенными за номер. например, номер 1 (a, b, c). Я пытаюсь написать метод, который, например, когда я ввожу 1234, я бы хотел, чтобы он предсказал слово, которое я пытаюсь написать, с помощью библиотеки слов, к которой имеет доступ программа. поэтому, когда я нажимаю 1, я извлекаю из библиотеки все уникальные слова, начинающиеся с a, b или c. Затем я рассмотрю число 2 (d, e, f), которое было нажато, и извлеките из предыдущего списка все слова, начинающиеся с a, b, c, но имеющие в качестве второго символа d, e или f. То, что я делаю, пытается генерировать новый arraylist, чтобы вставлять новые отфильтрованные слова. Я просто не знаю, как автоматизировать генерацию создания arraylists.

мой пример кода:

//cycles through each possible alaphabetical characters represented by the numbers that constitute "signature" 
for (int countSignature = 0; countSignature < signature.length();countSignature++){ 
    if (signature.codePointAt(countSignature) == 50) {// Representing 2 
     for (int j = 0; j < set1.size(); j++){ //iterating through the array for each word that starts with a,b, or c. 
      if (arraySet1[j].codePointAt(countSignature) == 97 
        || arraySet1[j].codePointAt(countSignature) == 98 
        || arraySet1[j].codePointAt(countSignature) == 99) { 

       arrayListSet2.add(arraySet1[j]); 
       //need to generate new arrayList for the next round of filtering. 
       f(j++) 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 51){ // Representing 3 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 100 
        || arraySet1[j].codePointAt(countSignature) == 101 
        || arraySet1[j].codePointAt(countSignature) == 102) { 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 52){ // Representing 4 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 103 
        || arraySet1[j].codePointAt(countSignature) == 104 
        || arraySet1[j].codePointAt(countSignature) == 105) { 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 53){ // Representing 5 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 106 
        || arraySet1[j].codePointAt(countSignature) == 107 
        || arraySet1[j].codePointAt(countSignature) == 108) { 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 54){ // Representing 6 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 109 
        || arraySet1[j].codePointAt(countSignature) == 110 
        || arraySet1[j].codePointAt(countSignature) == 111) { 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 55){ // Representing 7 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 112 
        || arraySet1[j].codePointAt(countSignature) == 113 
        || arraySet1[j].codePointAt(countSignature) == 114 
        || arraySet1[j].codePointAt(countSignature) == 115){ 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 56){ // Representing 8 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 116 
        || arraySet1[j].codePointAt(countSignature) == 117 
        || arraySet1[j].codePointAt(countSignature) == 118) { 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else if(signature.codePointAt(countSignature) == 57){ // Representing 9 
     for (int j = 0; j < set1.size(); j++) { 
      if (arraySet1[j].codePointAt(countSignature) == 119 
        || arraySet1[j].codePointAt(countSignature) == 120 
        || arraySet1[j].codePointAt(countSignature) == 121 
        || arraySet1[j].codePointAt(countSignature) == 122) { 

       arrayListSet2.add(arraySet1[j]); 
      } 
     } 
    }else{ 
     System.out.println(""); 
    } 
} 
+0

Возможно, вы захотите пересмотреть свою логику. – Maroun

+0

логика не ясна. Вам нужно больше подключиться к это. – Ajit

+0

Возможный дубликат http://stackoverflow.com/questions/1480663/how-can-i-slice-an-arraylist-out-of-an-arraylist-in-java – Rossiar

ответ

0

Если вы не знаете номер ArrayLists вам нужно, сделать ArrayList из ArrayLists, позволяет назовите его containerList. Когда вам нужен новый itemList, создайте новый ArrayList и добавьте его в containerList.

0

Вы используете неправильную структуру данных для этого. Что вам нужно, это древовидная структура, которая выглядит следующим образом (для этого примера позволяет использовать слова «дерево», «Три» и «Try»

     T 
       H   R 
       R  E  Y 
       E  E 
       E 

Теперь вы можете просто идти вниз по дереву, если у них есть уже набрал T и R, тогда вы можете просто сделать простой поворот и определить это дерево и попробовать возможные слова. Вы также должны прервать тройку, как только узнаете, что получите слишком много результатов.

Эти данные структура называется Trie: http://en.wikipedia.org/wiki/Trie

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