Main Content

正しくない Java データ型

Java 文字列から MATLAB 文字ベクトルへ

文字ベクトルの構造体

一部の MATLAB® 構造体は、名前と値のペアの struct を入力引数として受け入れます。Java® 用の MATLAB エンジン API は com.mathworks.matlab.engine.Struct クラスを提供してこのデータ構造体を Java で作成し、MATLAB に渡します。構造体はそこで MATLAB の struct に変換されます。

struct 入力を受け入れる一部の MATLAB 関数では、フィールドの値が MATLAB string (string) ではなく MATLAB 文字ベクトル (char) であることが要求されます。値の型が正しい Java Struct を作成するには、変数を MATLAB に渡す前に Stringchar 配列に変換します。

変換には toCharArray メソッドを使用できます。

char[] on = "on".toCharArray();
char[] yOut = "yOut".toCharArray();
char[] tOut = "tOut".toCharArray();
Struct simParam = new Struct("SaveOutput", on, "OutputSaveName",
        yOut,"SaveTime", on, "TimeSaveName", tOut);

String 引数から文字ベクトルへ

MATLAB 関数で char 入力が必要な場合は、MATLAB に渡される関数呼び出しで Java String を変換できます。たとえば、MATLAB 関数 eval では char 入力が要求されます。

double result = engine.feval("eval", "3+5");
Undefined function 'eval' for input arguments of type 'string'..

char 配列を渡すと正常に機能します。

double result = engine.feval("eval", "3+5".toCharArray());

Java からのグラフィックス オブジェクトのプロパティの設定

オブジェクトのハンドルを使用して、MATLAB グラフィックス オブジェクトのプロパティの値を設定することができます。プロパティの名前とプロパティの値を MATLAB に渡す際に、Java char 配列として渡します。

double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}};
HandleObject[] h = eng.feval("plot", (Object)data);
String property = ("HitTest");
String value = ("off");
eng.feval(0,"set", h, property.toCharArray(), value.toCharArray());

Java 整数から MATLAB double へ

sqrt など一部の MATLAB 関数では、入力が double (倍精度) または single (単精度) の値に限定されています。MATLAB エンジンは Java 整数を MATLAB int32 値に変換します。整数値を受け入れない MATLAB 関数については、適切な数値を必ず渡すようにしてください。

double result = engine.feval("sqrt", 4);
Undefined function 'sqrt' for input arguments of type 'int32'.

double を渡すと正常に機能します。

double result = engine.feval("sqrt", 4.0);

関連するトピック