[英]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.