java - Java 公共(public)枚举的问题

标签 java

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

相关文章:

java - 如何开始使用 Jemmy v2

java - 使用 csv writer 时转义逗号

java - 如何使用 writer 与使用扫描仪的用户输入

java - 我可以在 Realm 对象 android 中有字符串的 arrayList

java - 检查空结果集

java - 当不要求输入时,键入的文本显示在控制台中,我该如何阻止这种情况?

java - 如何启动 <provider/> 标签(启动 Shazam 搜索 Activity )

java - 如何将通用 JAXBElement 作为输入

java - 没有这样的方法错误: No virtual method getMapAsync

java - 从用户查找数据库中的数据