7

変数に演算子記号を割り当て、その変数を条件付きチェックに使用できますか?

char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){

    /* some code*/

}

条件内で演算子変数を使用できないのはなぜですか?

4

5 に答える 5

1

ねえそれはサポートされていませんこれは私には理にかなっていると思います。

コンパイラは、アプリのビルド時に演算子を読み込みます。演算子が何であるかを知る方法がないため、 http://www.daniweb.com/software-development/csharp/threads/266385/c-using-operator-as-a-で見つけた正確性を構築できません。計算中の変数

彼らはC#のコンテキストで話していますが、ここでも同じことが理にかなっていると思います。

これを直接行うことはできませんが、回避策があります。

http://www.coderanch.com/t/568212/java/java/arithmetic-operations-operator-stored-variables

それが本当に必要な場合は、コードでevalのようなものを使用する必要があります。このサンプルコードを試してみました。

package dumb;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class OperatorAsVariable
{
    public static void main( String args[] ) throws ScriptException
    {
        String test = "+";
        System.out.println( 1 + test + 2 );
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName( "js" );
        System.out.println( engine.eval( 1 + test + 2 ) );
    }

}

礼儀:Javaにeval()関数はありますか?

于 2013-01-19T07:48:03.663 に答える
0

Java のメソッド引数は式でなければなりません。また、演算子は式ではありません。これは Java では不可能です。

より良い方法は、それらの演算子を表すオブジェクト(列挙型)を渡すことです

例:

public enum Operator{
    GREATHERTHAN(">") {
        @Override public double apply(double x1, double x2) {
            return x1 > x2;
        }
    },LEESTHAN{
        @Override public double apply(double x1, double x2) {
           return x1 < x2;
        }
    }
}
于 2013-01-19T08:07:23.467 に答える
0

いいえ、Java ではそのようにすることはできません。

二項関係を動的に定義するには、チェックを行うための 2 つの引数メソッドを使用して、関係をオブジェクトとして表す必要があります。

if (binaryRelation.areRelated(a,b))
{
    // Do something
}

必要に応じて、標準Comparatorインターフェースが適している場合とそうでない場合があります。

于 2013-01-19T08:30:52.940 に答える
-1

ComparatorまたはComparableインターフェースとその使用方法を見てみましょう。次に、2 つの引数を取り、ブール値を返す独自のインターフェイスを定義し、それらに異なる実装を提供します (これは OOP です)。

もう 1 つの方法は、ラムダ式を持つ Java 8 を待つことです。

于 2013-01-19T08:04:52.787 に答える
-1

プログラミング言語で書かれたコードは、アセンブリ言語に変換する必要があります。これが発生すると、高水準言語で記述されたすべてのコード ステートメントは、同等の中水準言語の命令/一連の命令に変換されます。つまり、JAVA コードは、アセンブリ言語のマシン固有の命令に変換されます。

ここで、次のステートメントの加算操作は、

int a = a + 10;

に変換される場合があります。

1010 を追加します。

また、変数値にアクセスしようとすると、READ 命令に変換される場合があります。

したがって、変数で「>」を使用しようとすると、

char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){

/* some code*/

}

if ステートメント、

if(val2 operator val1) 

無効な命令に変換されます。2 つの値の比較に相当するものを生成する代わりに、'operator' 変数を読み取ります。

これは明らかに、間違った解釈につながります。

したがって、そのようなことを行うことは許可されていません。

すべてのコンパイラ (java、gcc など) は動作が異なる場合がありますが、ターゲットは同じです。Complier / Compilation / Execution をもっと読むと、もっとよくわかります。これらはいくつかのリンクです:

http://www.coderanch.com/t/559258/java/java/java-codes-converted-assembly-JVM

プログラミング言語コンパイラは、最初にアセンブリに変換しますか、それとも直接マシン コードに変換しますか?

AC プログラムのコンパイル手順。

http://www.herongyang.com/Computer-History/C-Program-Compilation-and-Execution-Process.html

于 2013-01-19T08:13:49.433 に答える