我正在尝试使用 Java 编程语言模拟 BB84 协议(protocol)。不管怎样,我在从结果中获取互补/反转数据集时遇到了一些麻烦。
在我的程序中,总共涉及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 complimentary()
在 Basis.java 中,它将接受生成的随机基并反转所使用的基。
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
关于java - Java 公共(public)枚举的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42781484/