0

次のコードを含むスクリプトがあります。

    import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;


public class app {
    public static int p;
    public static int b=0;
    public static int i;
    public static int add;

    public static List<Integer> a = new ArrayList<Integer>();
    public static List<Node> c = new ArrayList<Node>();
    public static void main(String[] args){
        Random rand = new Random();


        for( i = 0;i<=10;i++){
            int random = getRandom();
            if(random!=0){
        a.add(random);
            }else if(random == 0){

            }
        }
        Collections.sort(a);
        System.out.println(a);

        for(int z = 1;z<a.size();z++){
        Node n = new Node();
            Node.pos=a.get(z);
            System.out.println("Node pos set to "+a.get(z));
            c.add(n);
            System.out.println("Node at " + n.pos);

        }

        System.out.println("class array length " + c.size());
        System.out.println("Node at index " + 0 +" has a pos of " + c.get(0).pos);



    }

    public static int getRandom(){
        Random randd = new Random();
        int randomnum = randd.nextInt(10);
        if(!a.contains(randomnum)){
        return randomnum;
        }else if(a.contains(randomnum)){

        }
        return 0;
    }
}

これで達成しようとしているのはn、作成されたノードを、すべてのノードとその位置を保持する配列に追加することです。しかし、別のノードを作成すると、その前のすべてのノードがその位置に変更されるようです。

たとえば、試してみるc.get(0).posと、9 の値と同じ値が返されるか、配列がいくら大きくても返されます。配列に追加されたすべてのノードがその値を保持するようにするにはどうすればよいですか? どうしたの?

4

1 に答える 1

5

Node の pos フィールドは静的です。これは、インスタンスではなくクラスでアクセスしているため確認できます。非静的インスタンス変数にします。また、非静的フィールドであっても、フィールドに直接アクセスすることは避け、セッター メソッドとゲッター メソッドを使用する必要があります。

たとえば、次のことはしないでください。

Node n = new Node();
Node.pos=a.get(z);  // a static access on the class

むしろ:

Node n = new Node();
n.setPos(a.get(z));  // a non-static setter method call on the instance
于 2013-09-02T01:05:26.343 に答える