2014-12-21 3 views
0

Я хочу создать индекс с помощью массива объектов. Индекс, конечно же, представляет слово и строки, содержащие это слово. Я создал класс Pair, представляющий пару (слово , строки), где строки содержатся в массиве целых чисел. КлассСоздание индекса с массивом объектов

public class Pair 
{ private String word; 
    private int [] a; 
    private int inputSize; 

    public Pair(String word,int line) 
    {this.word=word; 
    a=new int [10]; 

    a[inputSize++]=line; 
    } 

    public String getWord() 
    {return word;} 

    public void addPosition(int line) //resize 
    { if(inputSize==a.length-1) 
     { int[] newA=new int [2*inputSize]; 
      for(int i=0;i<inputSize;i++) 
       { newA[i]=a[i];} 

       a=newA; 
     } 
    a[inputSize++]=line; 
    } 

    public String getPositions() 
    {String s=""; 
    for(int i=0;i<inputSize;i++) 
    {s=s+" "+a[inputSize] ;} 
    return s; 
    } 

    public String toString() 
    { String ss=""; 
    ss=getWord()+" [ " +getPositions()+" ] "; 
    return ss; 
    } 

} 

После того, как я создал индекс

public class Index 
{ private Pair [] a; 
    private int inputSize; 

    public Index() 
    {a=new Pair [10]; 
    inputSize=0; 
    } 

    public void add(String word,int pos) 
    { if(inputSize==a.length-1) 
     { Pair [] newA=new Pair [2*inputSize]; 
      for(int i=0;i<inputSize;i++) 
       { newA[i]=a[i];} 

       a=newA; 
     } 
    Pair p=new Pair(word,pos); 

    for(int i=0;i<inputSize;i++) 
    { if(a[i].getWord().equals(word)) // i check if "word" is already in the array, if so i add the new line 
      { a[i].addPosition(pos); 
      } 
    } 
    a[inputSize++]=p; 
    } 

    public String toString() 
    {String s=""; 
    for(int i=0;i<inputSize;i++) 
    { s=s+a[i].toString()+"\n"; 
    } 
    return s; 
    } 




} 

класс После того, как я создал главный класс

import java.io.*; 
import java.util.*; 

public class IndixTester 
{public static void main(String [] args) 
    { FileReader read=null; 
    Index index=new Index(); 
    Pair p; 
    try{read=new FileReader("input.txt"); 
     } 
    catch(IOException e) 
     {System.err.println("errore"); 
     } 
     int line=0; 
    Scanner c=new Scanner(read); 
    while(c.hasNextLine()) 
    { String s=c.nextLine(); 
     line++; 
     Scanner token=new Scanner(s); 
     token.useDelimiter("[^A-Za-z0-9]+"); 
     while(token.hasNext()) 
     { 
     String ss=token.next(); 

     index.add(ss,line); 


     } 

     token.close(); 

    } 
    System.out.println(index.toString()); 

    } 
} 

Но это не работает! Я получил что-то вроде это:

  1. кнопку [0 0]

  2. а [0 0 0 0 0]

  3. собака [0 0 0]

Вместо того, чтобы иметь что-то вроде этого

  1. кнопку [2 3]
  2. а [12 4 3 5]
  3. собаки [1 2]

Где, конечно, числа представляют строки, которые имеют это слово. Пожалуйста, помогите мне. Большое спасибо

ответ

1

Проблема с вашим a[inputSize] в getPositions() функции

public String getPositions() 
    {String s=""; 
    for(int i=0;i<inputSize;i++) 
    {s=s+" "+a[inputSize] ;} 
    return s; 
    } 

изменить его на [я]:

public String getPositions() 
    {String s=""; 
    for(int i=0;i<inputSize;i++) 
    {s=s+" "+a[i] ;} 
    return s; 
    } 
+0

Спасибо так много, такая глупая ошибка! –

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