Java Public Enum的问题

时间:2017-03-14 08:52:39

标签: java

我正在尝试使用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 

这是我的可运行程序:here

正如您所看到的,我试图在Basis.java中编写一个类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相同的数据,但似乎它再次生成随机基数。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您需要引用您想要赞美的确切实例。这可以通过传递参数或通过使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
相关问题