在Java中将double(基本类型)转换为枚举类型

时间:2017-05-26 02:14:00

标签: java enums token tokenize

我试图将表示函数(例如:f(x)= 2.5x + 10)的String转换为令牌的ArrayList。这就是我对令牌的所作所为:

public enum Tokens
{
    add,
    sub,
    mul,
    div,
    pow,
    exp,
    sin,
    cos,
    tan,
    sec,
    csc,
    cot,
    log,
    x,
    sta,
    end;
}

我希望能够做的事情基本上是将双倍投入到#34;代币"类型,同时保留double的值,以便常量可以用相同的方式表示,以便以后处理,但我不知道如何实现这一点。

2 个答案:

答案 0 :(得分:1)

正如您所发现的,您的Tokens枚举无法真正用于实际令牌,因为无法制作Tokens.x的不同版本(我猜{{1}用于表示公式中的数字...)以保存不同的数字值。

你需要的是一个Tokens.x类 - 一个“真正的”类 - 它可以保存(至少)一个标记类型和一个值:

Token

public class Token { private TokenType type; private Object value; public Token(TokenType type) { this.type = type; this.value = null; } public Token(TokenType type, Object value) { this.type = type; this.value = value; } // getters and setters for type and value omitted below // ... } 将是一个枚举; TokenType属性是value,因此它可以包含您可能需要的任何类型的值对象,用于不同的令牌类型。

现在,在决定如何使用Objecttype属性来表示您的令牌时,有几种方法可以解决。

一种方法是将您当前的value枚举重命名为Tokens,并将其值用于您的类型。大多数令牌类型(例如TokenTypeTokenType.csc)根本不需要任何值,因为TokenType.add会告诉您需要知道的所有内容。但是数字令牌需要知道其关联的数值,因此它们将type typeTokenType.x会将数值保存为value,{{1 ,},Double或其他什么。

但是,您可能会发现使用代表更广泛的语法类别的令牌类型更方便,例如“二元运算符”,“一元运算符”,“数字”,“结束公式”:

Integer

BINOP和UNOP令牌将使用BigDecimal属性来指示它们所代表的特定运算符。枚举非常适用于此目的:

public enum TokenType {BINOP, UNOP, NUMBER, END};

NUMBER将在value属性中显示其数值(同样,public enum BinOps {ADD, SUB, MUL, ... }; public enum UnOps {SIN, COS, TAN, ... }; valueDouble或其他任何内容。 END令牌不需要任何Integer

答案 1 :(得分:0)

我不确定我完全理解你的问题。但是如果你想将enum转换为double,你可以这样做。

public enum Tokens{
  add(2.0);

  private double value;
  Tokens(double value){
    this.value = value; 
  }

  public double getValue(){
    return this.value;
  }

  public static void main(String[] args) {
    System.out.println(Tokens.add.getValue());
    double a = 2.0;
    for (Tokens token:Tokens.values()) {
        if(a == token.getValue()){
            System.out.println(token);
        }
    }
  }
}
相关问题