変数に演算子記号を割り当て、その変数を条件付きチェックに使用できますか?
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}
条件内で演算子変数を使用できないのはなぜですか?
変数に演算子記号を割り当て、その変数を条件付きチェックに使用できますか?
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}
条件内で演算子変数を使用できないのはなぜですか?
ねえそれはサポートされていませんこれは私には理にかなっていると思います。
コンパイラは、アプリのビルド時に演算子を読み込みます。演算子が何であるかを知る方法がないため、 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 のメソッド引数は式でなければなりません。また、演算子は式ではありません。これは 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;
}
}
}
いいえ、Java ではそのようにすることはできません。
二項関係を動的に定義するには、チェックを行うための 2 つの引数メソッドを使用して、関係をオブジェクトとして表す必要があります。
if (binaryRelation.areRelated(a,b))
{
// Do something
}
必要に応じて、標準Comparator
インターフェースが適している場合とそうでない場合があります。
ComparatorまたはComparableインターフェースとその使用方法を見てみましょう。次に、2 つの引数を取り、ブール値を返す独自のインターフェイスを定義し、それらに異なる実装を提供します (これは OOP です)。
もう 1 つの方法は、ラムダ式を持つ Java 8 を待つことです。
プログラミング言語で書かれたコードは、アセンブリ言語に変換する必要があります。これが発生すると、高水準言語で記述されたすべてのコード ステートメントは、同等の中水準言語の命令/一連の命令に変換されます。つまり、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