我正在尝试使用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相同的数据,但似乎它再次生成随机基数。可能是什么问题?
答案 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