2017-06-02 3 views
-5

私はjavaでコンビナトリアル計算機を作りたいと思っていますが、私は非常に初心者です。私はクラスを持っています、その名前は順列です。私は配列リストを宣言しましたが、その中にコンテンツをアップロードすることはできません。プログラムが実行された後、配列リストは空になります。どうして?私のJavaプログラムはどのように動くのですか? (ArrayList)

package combinatorics; 
import java.util.*; 

public class Permutation { 

    private int num; 
    protected ArrayList<Integer> szamok = new ArrayList<Integer>(); 

    public Permutation(int number) { 
     this.num = number; 
    } 

    protected void makeArrayList() { 
     for (int i = 1; i < this.num+1; i++) { 
      this.szamok.add(i); 
     } 
    } 
} 

これは私のメインのメソッドです:

public static void main(String[] args) { 
     Permutation perm = new Permutation(5); 
     perm.getNumbers(); 
    } 
+2

あなたは決して 'makeArrayList()'を呼び出すことはありません。プライベートなので、クラス外の誰もそれを呼び出すことはできません。さらに悪いことに、コンストラクタもプライベートです。 – Compass

+0

コンストラクタはプライベートではありませんでした。 :D私は偶然に変更されました。しかし、コンストラクタがプライベートでない場合、arraylistも空になります。 – Kovoliver

+0

@Kovoliverあなたはこの点を見逃しています - 'makeArrayList()'がプライベートであるという事実も問題です。これは呼び出されませんので、あなたのArrayListは常に空です。コンストラクタをパブリックにすることは、少なくともその問題を解決するのに役立つものではありません。また、このクラスを実際に使用する場所を示すために質問を編集して、これに答えることが重要です。 – EJoshuaS

答えて

0

機能makeArrayListが呼び出されないので、何もArrayListに追加されていない理由はあります。もう一つ間違っているのは、あなたのコンストラクタもプライベートなので不要であり、そのクラスのインスタンスを作成できないということです。あなたのコンストラクタにmakeArrayListを呼び出すか、Permutationクラスの外に別々に項目を追加することができます。あなたはまた、実行して、ArrayListにアイテムを追加することができます

:次に

System.out.println(p.szamok.toString(); 

[num]

+0

'szamok'が保護されています。 – EJoshuaS

+1

その問題は? Permutationはおそらく同じパッケージにあります。つまり、Mainクラス内でアクセスすることができます。 – Splinxyy

1

を返します

Permutation p = new Permutation(num); 
p.szamok.add(num); 

をさて、この作品:

をこの主な方法で

public static void main(String[] args) { 
     Permutation perm = new Permutation(10); 
     perm.makeArrayList(); 
     perm.getNumbers(); 
     launch(args); 
    } 

は私sptupidの質問にansewrsいただき、ありがとうございます。 :)私は本当に初心者です、ごめんなさい!

関連する問題