2016-10-08 5 views
5

私はSparseMatrixというクラスを持っています。それはノードのArrayList(クラスも含む)を含んでいます。私は、Arrayを反復処理し、Nodeの値にアクセスする方法について不思議です。私は以下を試しました:オブジェクトのArrayListを反復処理する方法は?

//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_; 
    } 
} 

私はたぶん静的な配列に切り替えます(オブジェクトを追加するたびにリメイクします)。誰かが解決策を持っているなら、私はそれを私と共有していただければ幸いです。また、私に手伝ってあげてくれてありがとう。

あなたがここで何かを理解していない場合は、お気軽に質問してください。

+1

あなたが使用する必要があり、このようなコレクションを反復処理するには、foreachループを使用ジェネリックで、[i]を使ってArrayListから要素を取得することができない場合は、.get(i)を使用する必要があります。 –

答えて

2

最初にキャストする必要がある、あなたは生の型を使用しないでください。詳細については、このリンクを参照してください。What is a raw type and why shouldn't we use it?

修正点は、アレイリストに保持されているオブジェクトのタイプを宣言することです。そして、あなたは(通常の配列のために働くだろうfilled_data_[i]とは反対に、)filled_data_.get(i)を使用して、配列リストの各要素にアクセスすることができます

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

:への宣言を変更します。

`filled_data_.get(i)` 

上記は、インデックスiの要素を返します。ここでのドキュメント:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#get(int)

+0

これは多くの助けになります、ありがとうございます。 (私はC++の経験があるので、Javaのコンセプトは私にはあまり新しいものではありません。)静的配列(非効率的)でこれを行う方法を見つけたので、これを考慮に入れます。再度、あなたの助けに感謝します。 – sudomeacat

+0

@diuqSehTnettiK問題はありません] – nhouser9

1

あなたは、一般的な使用しなかった場合は、オブジェクトのすべての

//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_; 
} 

}

+0

それは興味深いと思います、あなたが意味するものの例を提供してください。 – sudomeacat

0

配列リストは、あなたが使用することができgetLocation()定義Nodesが含まれている場合:

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

ます。またfilled_data_は、のオブジェクトのリストを含むリストであると仮定すると、

ArrayList<Nodes> filled_data_ = new ArrayList<Nodes>(); 
3

を定義することができますNodeという名前のクラス。

List<Nodes> filled_data_ = new ArrayList<>(); 
for (Node data : filled_data_) { 
    data.getVariable1(); 
    data.getVariable2(); 
} 

詳細情報http://crunchify.com/how-to-iterate-through-java-list-4-way-to-iterate-through-loop/

+0

私はこれについて言及しませんでしたが、ArrayList全体を解析するつもりはありません。それでも、これは知っておくと良いことです。ありがとうございました。 – sudomeacat

0

あなたがArrayListオブジェクトを作成するときは、<>ブラケット付き含まれている要素の型を指定する必要があります。 クラスではなく、Listインターフェイスへの参照を保持することも良いです。ここで

は、Nodeクラスの例である:ここで

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; 
    } 
} 

は、メインクラスの例である:

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()); 
     } 
    } 
} 
関連する問題