平等或不平等的问题

时间:2017-10-26 21:38:26

标签: java char

我一直想知道如何和/或是否可以使用char方程式。请不要评论“为什么你想这样做?”

示例:

public static void main(String... args) {

    char equalitySign = '<';

    boolean check = 5 equalitySign 10;

} 

我知道上面的代码不会运行( obvisously ),但我想知道是否有类似的方法。或者我只需要使用if / switch语句?

示例2:

public static void main(String... args) {

    char equalitySign = '<';
    boolean check;

    if (equalitySign == '<' + '=') {
        check = 5 <= 10; 
        System.out.println("is 5 less than or equal to 10, " + check);
    } else if (equalitySign == '<') {
        check = 5 < 10; 
        System.out.println("5 is less than 10, " + check);
    } else if (equalitySign == '>') {
        check = 5 > 10; 
        System.out.println("5 is greater than 10, " + check);
    }

}

谢谢!

4 个答案:

答案 0 :(得分:3)

“示例2”是您的选择。只需使用if-else if代替所有if语句或switch-case语句。

注意 - 正如其中一位评论者指出的那样,您可能希望使用String比较,因为您的某个运算符是“&lt; =”且超过1个字符。因此,您必须坚持使用if-else if而不是switch case

答案 1 :(得分:2)

正如其他人所指出的那样,可能的比较地图也会起作用。 首先,我们需要一个接口来声明一个比较方法:

interface IntComparator { boolean compare(int left, int right); }

然后是可能的比较地图:

Map<String, IntComparator> comparisons = new HashMap<>();
comparisons.put("=", (l, r) -> { return l == r; });
comparisons.put("<", (l, r) -> { return l < r; });

现在您可以通过在地图中查找正确的比较器来使用您感兴趣的比较:

System.out.println(comparisons.get("=").compare(1, 2));
System.out.println(comparisons.get("<").compare(1, 2));

Example in ideone.com

注意:我在Java中最好的日子已经过去了,在C#中,泛型中允许使用原语,而且我们有一个委托类型,这可能会更加清晰。我不确定这些天我的代码是否被认为是好的代码。

答案 2 :(得分:0)

使用地图

你可以有一个从字符串操作数到bifunction的数字和数字的映射到布尔值。

然后,您可以使用给定操作数作为键来使用抛出异常的默认函数来获取双功能。

然后,您可以在参数上调用函数并返回结果。

示例代码

Java 9,但如果地图创建更改为不使用Map.of

,则可以是Java 8
import java.util.Map;
import java.util.function.BiFunction;

public class Example {
    @FunctionalInterface
    interface Operation extends BiFunction<Integer, Integer, Boolean>{}

    public static final Map<String, Operation> HANDLERS = Map.of(
        ">", (p,q) -> p > q,
        "<", (p,q) -> p < q,
        "<=", (p,q) -> p <= q
    );

    public static boolean evaluate(int first, String operator, int second) {
        final Operation handler = HANDLERS.getOrDefault(operator, (p,q) -> {
                throw new AssertionError("Bad operator: " + operator);
        });
        return handler.apply(first, second);
    }

    public static void main(final String... args) {
        System.out.println(evaluate(1, "<", 3));
        System.out.println(evaluate(3, "<", 1));
        System.out.println(evaluate(1, "<=", 3));
        System.out.println(evaluate(3, "<=", 3));
        System.out.println(evaluate(3, "%", 3));
    }
}

答案 3 :(得分:-3)

事实上:

char c1 = 'a';
char c2 = 'b';
System.out.println(c1 < c2); // This is print true

这是因为每个char值都有一个相应的ASCII值。 ASCII值是整数,按定义可比较。

在此处找到ASCII表:https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html