簡體   English   中英

Java Public Enum出現問題

[英]Trouble with Java Public Enum

我正在嘗試使用Java編程語言來模擬BB84協議。 無論如何,我在從結果中獲取互補/反轉數據集時遇到了一些麻煩。

在我的程序中,總共涉及3個步驟。

1. Generate 5 random binary number **check** 
---> exp: 10010 
2. Random bases to represent each bits (either rectilinear or diagonal) **check** 
---> exp: RECTILINEAR, RECTILINEAR, DIAGONAL, DIAGONAL, RECTILINEAR  
3. Complimentary bases (Invert bases used in second step) **not check** 
---> exp: DIAGONAL, DIAGONAL, RECTILINEAR, RECTILINEAR, DIAGONAL 

這是我的可運行程序: 這里

如您所見,我試圖在Basis.java中編寫一個Basis complimentary() prepare Basis complimentary()類,它將隨機生成並反轉所使用的基數。

public enum Basis {
    RECTILINEAR,
    DIAGONAL;

    public static Basis random() {
        int i = (int)(Math.random()*2);
        if(i==0)
            return Basis.RECTILINEAR;
        else
            return Basis.DIAGONAL;
    }


    public static Basis complimentary() {

            if (Basis.random()==Basis.RECTILINEAR)
            {
                return Basis.DIAGONAL;
            }
            else
            {
                return Basis.RECTILINEAR;
            }
        }

}

但是我注意到它再次產生了隨機基數,而我的第三步似乎沒有輸出第二步中使用的反轉集。 感謝幫助。

編輯:

因此,在FilterScheme2.java中,我在這樣的構造函數中引用了FilterScheme1.java。

public class FilterScheme2 extends AbstractScheme{
    private Filter[] filters;

    public FilterScheme2(int size) {
        super(size);

        filters = new Filter[size];

        FilterScheme1 f = new FilterScheme1(size);//reference to FilterScheme1.java

        for(int i=0;i<size;i++) {
             filters[i] = new Filter(filters[i].getBasis().complimentary()); //generate the second set of complimentary bases (rectilinear/diagonal)  
                }

    }

我試圖輸出System.out.println(f.toString()); 以確保獲得與FilterScheme1相同的數據,但似乎又會生成隨機基數。 可能是什么問題呢?

您需要引用你想要確切實例的恭維。 這可以通過作為參數傳遞或通過使complimentary非靜態來實現:

public static Basis complimentary(Basis subject) {
  if (subject == Basis.RECTILINEAR)
  {
    return Basis.DIAGONAL;
  }
  else
  {
    return Basis.RECTILINEAR;
  }
}
…
Basis.complimentary(Basis.DIAGONAL); // RECTILINEAR

要么

public Basis complimentary() {
  if (this == Basis.RECTILINEAR)
  {
    return Basis.DIAGONAL;
  }
  else
  {
    return Basis.RECTILINEAR;
  }
}
…
Basis.DIAGONAL.complimentary(); // RECTILINEAR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM