0

これは、どの演算子の優先順位が最も高いかを確認するために私が書いた方法です。私の質問は次のとおりです。これを行うことができる他の方法はありますか? 私はこれをテストしており、問題なく動作しますが、改善の余地があるはずです. どう思いますか?

static boolean hasHigherPrecendence(char top, char current){

    String t = String.valueOf(top);
    String c = String.valueOf(current);

    System.out.println(t);
    System.out.println(c);

    switch (t) {
    case "-":
        if ( c.equals("-") || c.equals("+") )
            return false;
        break;      
    case "+":
        if ( c.equals("-") || c.equals("+") )
            return false;
        break;          
    case "/":
        if ( !c.equals("*") || !c.equals(t) || !c.equals("%") )
            return false;
        break;      
    case "*":
        if ( !c.equals("%") || !c.equals(t) || !c.equals("/"))
            return false;
        break;
    case "%":
        if (c.equals(t) || c.equals("*") || c.equals("/"))
            return false;
        break;          
    default:
        throw new IllegalArgumentException("Operator unknown: " + t);
    }       

    return true;
}
4

3 に答える 3

1

マップ、配列、関数を使用する以外に、同じ動作でケースを連結することでコードを削減できます。

static boolean hasHigherPrecendence(char top, char current){

    String t = String.valueOf(top);
    String c = String.valueOf(current);

    System.out.println(t);
    System.out.println(c);

    switch (t) {
    case "-":
    case "+": 
        if ( c.equals("-") || c.equals("+") )
            return false;
        break;              
    case "/": 
    case "*":
    case "%":
        if (c.equals("%") || c.equals("*") || c.equals("/"))
            return false;
        break;          
    default:
        throw new IllegalArgumentException("Operator unknown: " + t);
    }       

    return true;
}
于 2013-11-07T16:41:22.710 に答える