【问题标题】:How do I fix the operation switch statement如何修复操作 switch 语句
【发布时间】:2019-11-03 15:56:01
【问题描述】:

在这个名为 AClass 的类中,我尝试制作一个 switch 语句,该语句将使用在两个值之间输入的运算符。

public interface Operation {
  public enum Operator {Add, Sub, Mult, Div, Rem}
}


import java.util.*;
import java.io.*;

public class AClass<I> implements Operation {

    AClass <Integer> leftoperand = new AClass <Integer>();
    AClass <Operator> operation = new AClass <Operator>();
    AClass <Integer> rightoperand = new AClass <Integer>(); 

  public Integer value (SClass sc) {
    switch (operation) {
        case Add:
            return leftoperand.value(sc) + rightoperand.value(sc);
        case Sub:
            return leftoperand.value(sc) - rightoperand.value(sc);
        case Mult:
            return leftoperand.value(sc) * rightoperand.value(sc);
        case Div:
            return leftoperand.value(sc) / rightoperand.value(sc);
        case Rem:
            return leftoperand.value(sc) % rightoperand.value(sc);
    }
  }

  public String toString() {
   return "(" + leftoperand + "," + operation + "," + rightoperand + ")";
  }
}
Error: incompatible types: AClass<AClass.Operator> cannot be converted to int

Error: cannot find symbol
  symbol:   variable Add
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Sub
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Mult
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Div
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Rem
  location: class AClass<I>

我收到了一些错误,从开关(操作)行开始。我该如何解决这个问题? 另外,我可以在 AClass 中插入枚举运算符而不是使用接口吗?

【问题讨论】:

  • 首先将字段operation 更改为Operator,而不是AClass &lt;Operator&gt;,然后将字段重命名为operator

标签: java enums switch-statement


【解决方案1】:

Java switch 语句不支持所有类。 从java文档, 与 if-then 和 if-then-else 语句不同,switch 语句可以有许多可能的执行路径。开关适用于 byte、short、char 和 int 原始数据类型。它还适用于枚举类型(在 Enum Types 中讨论)、String 类和一些包装某些基本类型的特殊类:Character、Byte、Short 和 Integer(在 Numbers 和 Strings 中讨论)。

AClass <Operator> operation = new AClass <Operator>(); // will not work
Operator operation = Operator.ADD; // will work since operator is an enum;

【讨论】:

  • 所以我必须使用 .ADD 函数而不是 元素?那么我可以保留我的 switch 语句吗?
  • 只是为了澄清 ADD 不是一个函数,它是一个枚举,是的,您可以使用 ADD 枚举并保留 switch 语句。
猜你喜欢
  • 2021-03-23
  • 1970-01-01
  • 2020-06-10
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多