2016-10-08 29 views
5

SparseMatrix adlı bir dersim var. Bir Dizi Listesi (ayrıca sınıf) içerir. Dizide nasıl yinelendiğimi ve Düğümde bir değere nasıl erişeceğimi merak ediyorum.ArrayList nesneleriyle nasıl yinelenir?

//Assume that the member variables in SparseMatrix and Node are fully defined. 
class SparseMatrix { 
    ArrayList filled_data_ = new ArrayList(); 
    //Constructor, setter (both work) 

    // The problem is that I seem to not be allowed to use the operator[] on 
    // this type of array. 
    int get (int row, int column) { 
     for (int i = 0; i < filled_data_.size(); i++){ 
      if (row * max_row + column == filled_data[i].getLocation()) { 
       return filled_data[i].getSize(); 
      } 
     } 
     return defualt_value_; 
    } 
} 

Herhalde statik diziler geçmek (ve bunu her zaman bir nesne eklemek yeniden) olacaktır: Aşağıdaki çalıştılar. Birisinin bir çözümü varsa, benimle paylaştığınız için çok memnun olurum. Ayrıca, bana yardım ettiğiniz için şimdiden teşekkür ederim.

Burada herhangi bir şey anlamadıysanız soru sormaya çekinmeyin. Eğer jenerik kullanmadıysanız

+1

kullanarak edilmelidir: Burada

public class Node { private int value; public Node(int value) { this.value = value; } public void setValue(int value) { this.value = value; } public int getValue() { return value; } } 

Ana sınıfının bir örneğidir jenerikler ve [i] bir ArrayList öğesinden bir öğe almak için kullanamazsınız .get (i) kullanmanız gerekir. –

cevap

2

ilk döküm gerekir. Daha fazla bilgi için şu bağlantıya bakın: What is a raw type and why shouldn't we use it?

Düzeltme, dizi listenizin tuttuğu nesne türünü bildirmektir.

ArrayList<Node> filled_data_ = new ArrayList<>(); 

Sonra (normal dizi için çalışacak filled_data_[i] aksine) filled_data_.get(i) kullanılarak dizi listesindeki her eleman erişebilir: beyanı değiştirin.

`filled_data_.get(i)` 

yukarıda indeksi i de eleman dönecektir. Burada Dokümantasyon:

((Nodes)filled_data_.get(i)).getLocation() 

Ayrıca

ArrayList<Nodes> filled_data_ = new ArrayList<Nodes>(); 
+0

Bu çok yardımcı olur, teşekkürler. (C++ ile tecrübem var, bu yüzden Java kavramları benim için oldukça yeni.) Bunu statik dizilerle (verimsiz) yapmak için bir yol buldum, bu yüzden bunu hesaba katacağım. Yardımların için tekrar teşekkürler. – sudomeacat

+0

@diuqSehTnettiK no problem =] – nhouser9

1

, o zaman nesne

//Assume that the member variables in SparseMatrix and Node are fully defined. 
class SparseMatrix { 
ArrayList filled_data_ = new ArrayList(); 
//Constructor, setter (both work) 

// The problem is that I seem to not be allowed to use the operator[] on 
// this type of array. 
int get (int row, int column) { 
    for (int i = 0; i < filled_data_.size(); i++){ 
     Node node = (Node)filled_data.get(i); 
     if (row * max_row + column == node.getLocation()) { 
      return node.getSize(); 
     } 
    } 
    return defualt_value_; 
} 

}, ham türlerini kullanmamalısınız tüm

+0

Bu kulağa ilginç geliyor, lütfen ne demek istediğinizi belirtin. – sudomeacat

0

, sen <> parantez ile içerdiği öğe türünü belirtmek gerekir. List arayüzüne referansı tutmak da iyi - ArrayList sınıfını değil. İşte

Düğüm sınıfının bir örneğidir: foreach döngü kullanmak, böyle bir topluluk içinde yineleme için

public class Main { 

    public static void main(String[] args) { 

     List<Node> filledData = new ArrayList<Node>(); 
     filledData.add(new Node(1)); 
     filledData.add(new Node(2)); 
     filledData.add(new Node(3)); 

     for (Node n : filledData) { 
      System.out.println(n.getValue()); 
     } 
    } 
}