问题引出:
在Java中调用Matlab的方法时,有三种方式。大致都有2个参数,第一个参数是定义输出结果,第二个参数为输入参数。
方式一:functionName(int arg0, Object... agr1): Object[]
方式二:functionName(List arg0, List agr1): void
方式三:functionName(Object[] arg0, Object[] agr1): void
结论:
三种方式中,方式一最常用;个人推荐方式三,因为其更简洁、代码可读性更强;方式二则有点绕。
案例解释:
下面以Matlab JA Builder中的MagicSquare中的案例来解释说明。
方式一:functionName(int arg0, Object... agr1): Object[]
// 定义输出结果
Object[] results = null;
Magic magic = new Magic();
// '2' 标识了要得到2个输出结果,最后results在调用了方法后,变成results=new Object[2];
// '5' 表示输入的参数是数字‘5’
results = magic.makesqr(2, 5);
// 输出第一个返回内容
System.out.println(results[0]);
// 输出第二个返回内容
System.out.println(results[1]);
方式二:functionName(List arg0, List agr1): void
// 定义结果List
List<Object> results = new ArrayList<Object>(2);
// 定义参数List
List<Object> inputs = new ArrayList<Object>(1);
Magic magic = null;
magic = new Magic();
// 注意:结果List要预先加入内容,Null即可
results.add(null);
results.add(null);
// 输入的参数
inputs.add(5);
// 调用方法
magic.makesqr(results, inputs);
// 显示结果
System.out.println(results.get(0));
System.out.println(results.get(1));
方式三:functionName(Object[] arg0, Object[] agr1): void
// 注意:定义输出结果的时候,要定义数组大小
Object[] results = new Object[2];
Magic magic = null;
magic = new Magic();
// 这种方式,第二参数必须为数组,而不能为可变数组
Object[] inputs = new Object[]{5};
magic.makesqr(results, inputs);
// 输出第一个返回内容
System.out.println(results[0]);
// 输出第二个返回内容
System.out.println(results[1]);
最后附上完整的代码
import makesquare.Magic;
import com.mathworks.toolbox.javabuilder.MWArray;
import com.mathworks.toolbox.javabuilder.MWException;
public class MagicSquare3 {
public static void main(String[] args) {
Object[] results = new Object[2];
Magic magic = null;
try {
magic = new Magic();
// 这种方式,第二参数必须为数组,而不能为可变数组
Object[] inputs = new Object[]{5};
magic.makesqr(results, inputs);
// 输出第一个返回内容
System.out.println(results[0]);
// 输出第二个返回内容
System.out.println(results[1]);
} catch (MWException e) {
e.printStackTrace();
} finally {
MWArray.disposeArray(results);
if (magic != null) {
magic.dispose();
}
magic = null;
}
}
}