2016-03-31 29 views
1

Ben java bir program yazıyorum ve düğümleri başka bir liste olan bir liste yapmak gerekir. alt listesinin düğümler için My kod şudur:Java yığın alanı özel durum

public class Page { 

    private String word; 
    private int num; 

    public String getWord() { 
     return word; 
    } 
    public void setWord(String word) { 
     this.word = word; 
    } 
    public int getNum() { 
     return num; 
    } 
    public void setNum(int num) { 
     this.num = num; 
    } 

    public Page(String word, int num) { 
     this.word = word; 
     this.num = num; 
    } 

} 

benim ana listenin düğümler için My kodudur:

import java.util.ArrayList; 

public class IndPage { 
    private ArrayList<Page> Eggrafi; 
    //private ArrayList<Page> Eggrafi = new ArrayList<Page>(); 

    public IndPage(String name, int bytes) { 
     Eggrafi = new ArrayList<Page>(); 
     Eggrafi.add(new Page(name, bytes)); 
    } 

    public ArrayList<Page> getEggrafi() { 
     return Eggrafi; 
    } 

    public void setEggrafi(ArrayList<Page> eggrafi) { 
     Eggrafi = eggrafi; 
    } 

} 

benim listeyi doldurmak için benim ana aşağıdaki kodda kullanmak

if(Index.size()!=0){ 
          for(int j=0;j<Index.size();j++){ 
           for(int y=0;y<Index.get(j).getEggrafi().size();y++){ 
            if((Index.get(j).getEggrafi().get(y).getWord()).equals(tokens[i-1])){ 
             Index.get(j).getEggrafi().add(new Page(fileName[k],byte_count)); 
            } 
            else{ 
             Index.add(new IndPage(fileName[k],byte_count)); 
            } 
           } 
          } 
         } 
         else{ 
          Index.add(new IndPage(fileName[k],byte_count)); 
         } 

Ayrıca benim ana liste bu şekilde ilan edilir:

List<IndPage> Index = new ArrayList<IndPage>(); 
i java yığın boşluk istisna olsun

Birçok şeyi denedim, ancak yine de java yığın alanı istisnasını alıyorum.

+1

"private ArrayList Eggrafi;" iki kez ve iki kez başlatılıyor (sınıfta ve yapıcıda). – Tokazio

+0

Üzgünüm özel ArrayList Eggrafi = new ArrayList (); yorum yaptı. –

cevap

3

Sorununuz döngü Gözlerinde farklı olduğunu:

for(int j=0;j<Index.size();j++){ 
    for(int y=0;y<Index.get(j).getEggrafi().size();y++){ 
    if((Index.get(j).getEggrafi().get(y).getWord()).equals(tokens[i-1])){ 
     Index.get(j).getEggrafi().add(new Page(fileName[k],byte_count)); 
    } 
    else{ 
     Index.add(new IndPage(fileName[k],byte_count)); 
    } 
    } 
} 

Sizin döngüler vardır için .size() işlevine karşı bir denetim yapmak için bu listelere yeni öğeler eklediğiniz için .size() öğesi her zaman j veya y dizin değişkenlerinden en az 1 daha fazla olacak ve döngüler hiçbir zaman sona ermeyecektir. Sonuçta sizi yığın alanı dışında çalıştırıyor. Index.size() ve Index.get (j) .getEggrafi(). Size() değerleri her zaman for döngüsü tarafından yeniden hesaplanır, önbelleğe alınmazlar.

2

Kodun her ekleme için yeni bir liste ayırdığını düşünüyorum.

import java.util.List; 
import java.util.ArrayList; 

public class IndPage { 
    private List<Page> Eggrafi = new ArrayList<Page>(); 

    public IndPage(final String name, final int bytes) { 
     Eggrafi.add(new Page(name, bytes)); 
    } 

    public List<Page> getEggrafi() { 
     return Eggrafi; 
    } 

    public void setEggrafi(final List<Page> eggrafi) { 
     Eggrafi = eggrafi; 
    } 

} 

döngüler için kod Java 5 stil koleksiyonunu kullanarak geliştirilebilir yani döngüler:

for (final Page page : Eggrafi) { 
    ... 
} 
+0

Bunu kullandım ve hala istisna alıyorum .. –