2013-06-14 5 views
0

Вот что у меня есть. Я пытаюсь добавить значение имени в ArrayList типа indexStruct и не знаю, как это сделать. Имя - это строка, любая помощь будет отличной. Благодаря!Добавление значений в элементы ArrayList типа class

import java.util.ArrayList; 
public class Currentindex { 


    public void indexedWords(String currentWord, ArrayList <Indexstruct> currentIndex){  
    int convoMax=currentIndex.size(); 
    int convoMin=0; 
    int placeHolder; 
    int strComp; 
    //pull words to skip that appear frequently in a typical conversation 


    while(convoMax>convoMin){   //binary search 
     placeHolder=(convoMin+convoMax)/2; 
     strComp=currentWord.compareToIgnoreCase(currentIndex.get(placeHolder).Word); 
     if(strComp==0){ 
     currentIndex.add(placeHolder, Word); //<--Where problem occurs  
      break; 
     }  
     else if(strComp<0){ 
     convoMax=placeHolder-1;  
     } 
     else{ 
     convoMin=placeHolder+1; 
     } 
    } 
     //addterm(currentIndex); 
     System.out.println(currentIndex); 
    } 
} 

ответ

2

Я пытаюсь добавить значение имени в ArrayList типа indexStruct.

Конкретный ArrayList может содержать только элементы, которые имеют тип indexStruct. Это означает, что они:

  1. объекты класса indexStruct.
  2. объекты класса, расширяющие indexStruct.
  3. объекты класса, реализующие интерфейс под названием indexStruct.

Единственный способ, которым вы могли бы вставить свою строку, - это если в объекте indexStruct есть строковое поле.

Вы должны создать такой объект и присвоить ему имя. Затем добавьте этот объект в arraylist.

currentIndex.add(placeHolder, Word);

Проблема с вызовом currentIndex.add(placeHolder, Word); //<--Where problem occurs, является то, что переменная Word не существует.

Я предполагаю, что вы сравниваете currentWord с конкретным элементом в placeHolder, а затем хотите повторно вставить одно и то же слово снова, когда они равны (игнорируя случай). Это должно работать, если вы измените строку:

currentIndex.add(placeHolder, currentIndex.get(placeHolder)); 

Вы бы по существу входить другой экземпляр того же indexStruct объекта в положении placeHolder.

Кроме того, я предлагаю вам ознакомиться с iterators или усовершенствованными for loops, которые оптимизированы для итерации свыше ArrayLists.

См:

+0

Я дам вам взгляд и дам вам знать, как я получаю эту работу, спасибо! –

+0

Какой алгоритм вы пытаетесь реализовать? –

0

Вы используете

  1. ArrayList: Список массива, который может хранить объекты Indexstruct.
  2. И вы пытаетесь сохранить indexstruct.word (возможно, String, как я думаю).

Вы получаете проблемы из-за типа Indexstruct.word несовместимо с ArrayList.

Попробуйте это Добавить currentIndex.add (placeHolder, new Indexstruct (word)); ИЛИ альтернативно установить слово для вновь созданного объекта Indexstruct, а затем добавить этот объект.

+0

Я считаю, что мой был обманом, но вот что я сделал \t Indexstruct allInfo = new Indexstruct(); \t allInfo.Word = currentWord; \t // тянуть слова, чтобы пропустить часто появляются в обычном разговоре \t в то время как (convoMax> convoMin) {\t \t \t \t // бинарный поиск разбирает через индекс текущих слов в ArrayList \t \t StrComp = currentWord.compareToIgnoreCase (currentIndex.get (PlaceHolder) .word); \t \t, если (StrComp == 0) { \t \t \t allInfo.numOfUses = currentIndex.get (Местозаполнитель) .numOfUses + 1; \t \t \t currentIndex.set (placeHolder, allInfo); \t \t \t возвращение; \t \t} –

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