问题引出:
在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; } } }