简体   繁体   English

Java Public Enum出现问题

[英]Trouble with Java Public Enum

I am attempting to simulate a BB84 protocol using Java programming language. 我正在尝试使用Java编程语言来模拟BB84协议。 Anyway, I am having some trouble with getting the complimentary/invert set of data from the result. 无论如何,我在从结果中获取互补/反转数据集时遇到了一些麻烦。

In my program, there is a total of 3 steps involved. 在我的程序中,总共涉及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 

This is my runnable program: here 这是我的可运行程序: 这里

As you can see, I've attempted to write a class Basis complimentary() in Basis.java that will take in random basis generated and invert the bases used. 如您所见,我试图在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;
            }
        }

}

But I notice it is generating random bases all over again and my third step does not seem to output the invert set used in the second step. 但是我注意到它再次产生了随机基数,而我的第三步似乎没有输出第二步中使用的反转集。 Help is appreciated. 感谢帮助。

Edited: 编辑:

So, in the FilterScheme2.java, i referenced FilterScheme1.java in the constructor like this. 因此,在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)  
                }

    }

I tried to output System.out.println(f.toString()); 我试图输出System.out.println(f.toString()); to make sure that I get the same data as FilterScheme1 but it seems like it generate random bases again. 以确保获得与FilterScheme1相同的数据,但似乎又会生成随机基数。 What could be the problem? 可能是什么问题呢?

You need to reference what exact instance you want the compliment of. 您需要引用你想要确切实例的恭维。 This can be done by passing as argument, or by making complimentary non-static: 这可以通过作为参数传递或通过使complimentary非静态来实现:

public static Basis complimentary(Basis subject) {
  if (subject == Basis.RECTILINEAR)
  {
    return Basis.DIAGONAL;
  }
  else
  {
    return Basis.RECTILINEAR;
  }
}
…
Basis.complimentary(Basis.DIAGONAL); // RECTILINEAR

Or 要么

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM