java - 从 void 方法返回数组

标签 java arrays matlab

我是 Java 新手,无法解决我遇到的范围问题。我有一个 Matlab Connect (MConnect1()/MConnect2()) 方法,该方法需要为 void。我试图从另一个类访问方法中的变量,但得到一个 NullPointerException。我尝试创建一个名为 getResult() 的方法,但这也不起作用。我应该采取哪一步?

我正在尝试从 void MConnect2() 获取 array1。

package OMatlab;

import matlabcontrol.*;
import matlabcontrol.extensions.*;
import java.util.Arrays;

public class MatlabConnectVariable extends MatlabProxyFactory{

 private String MConnectStatus;
 public double result1;
 public String result2;
 public double[][] array1;
 public double[][] array2;
 public int i;
 public boolean conStat;



    public String getMConnectStatus() {
        return MConnectStatus;
    }

    //Default Constructor
    MatlabConnectVariable()
    {       
        if (conStat = true) {   
            MConnectStatus="The MatlabConnect class instance has been initiated";}
        else {MConnectStatus="WARNING: The MatlabConnect class instance could not been initiated";}

    }


    public void MConnect1() throws MatlabConnectionException, MatlabInvocationException
    {

        MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
        .setUsePreviouslyControlledSession(true)
        .setHidden(true)
        .setMatlabLocation(null).build(); 


//       MatlabProxyFactoryOptions options =
//             new MatlabProxyFactoryOptions.Builder()
//                 .setUsePreviouslyControlledSession(true)
//                 .build();

       MatlabProxyFactory factory = new MatlabProxyFactory(options);
       //MatlabProxyFactory factory = new MatlabProxyFactory();

       // create proxy
        MatlabProxy proxy = factory.getProxy();

        conStat = proxy.isConnected();   

//        ////Set a variable, add to it, retrieve it, and print the result
//        proxy.setVariable("a", 5);
//        proxy.eval("a = a + 6");
//        result = ((double[]) proxy.getVariable("a"))[0];
//        System.out.println("Result: " + result);



      //call user-defined function (must be on the path)
        //proxy.eval("addpath('C:\\Users\\odogu1\\Documents\\MATLAB')");
        proxy.feval("data_loading_script");
        //proxy.eval("rmpath('C:\\Users\\odogu1\\Documents\\MATLAB')");

        proxy.setVariable("a", 1);
        result1 = ((double[]) proxy.getVariable("new_data_added"))[0];          

        // close connection
        proxy.disconnect();

 }




    public void MConnect2() throws MatlabConnectionException, MatlabInvocationException
    {

        MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
        .setUsePreviouslyControlledSession(true)
        .setHidden(true)
        .setMatlabLocation(null).build(); 

        MatlabProxyFactory factory = new MatlabProxyFactory(options);
           //MatlabProxyFactory factory = new MatlabProxyFactory();

           // create proxy
            MatlabProxy proxy = factory.getProxy();

            conStat = proxy.isConnected();   

            //call user-defined function (must be on the path)
//          proxy.feval("data_loading_script");



            //Create a 4x3 array filled with random values
            proxy.eval("array1 = randn(4,1)");

            //Print a value of the array into the MATLAB Command Window
            proxy.eval("disp(['entry: ' num2str(array1(1, 1))])");

            //Get the array from MATLAB
            MatlabTypeConverter processor = new MatlabTypeConverter(proxy);
            double[][] array1 = processor.getNumericArray("array1").getRealArray2D();

            //Print out the same entry, using Java's 0-based indexing
//          System.out.println("entry: " + array1.getRealValue(2, 1));

            //Convert to a Java array and print the same value again    
//          double[][] result2 = array1.getRealArray2D();


//          System.out.println("ENTRY: " + result2[0][0]);

            int p=0;
            for(int i = 0; i < array1.length; i++)
            {
                System.out.println(Arrays.toString(array1[i]));
//              result2 = Arrays.toString(array1[i]);

            }


//          System.out.println(Arrays.toString(result2));


//          proxy.setVariable("a", 110);
//          result2 = ((double[]) proxy.getVariable("a"))[0];


            //result2 = ((double[]) proxy.getVariable("new_data"));


            // close connection
            proxy.disconnect();
    }

    public double[][] getResult2() {

        return array1;
    }

 }

最佳答案

看起来您将数组定义为字段,但从未使用过它。您在该方法中使用以下行定义了另一个同名的方法:

 MatlabTypeConverter processor = new MatlabTypeConverter(proxy);
 double[][] array1 = processor.getNumericArray("array1").getRealArray2D();

所以你不会让 array1 填充任何数据。只要这样做:

 array1 = processor.getNumericArray("array1").getRealArray2D();

并尝试调用 getResult2()。

关于java - 从 void 方法返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799292/

相关文章:

python - numpy 数组和矩阵有什么区别?我应该使用哪一个?

javascript - 在reactjs中删除重复项后如何从状态值和setstate创建数组

matlab - OpenCV函数类似于matlab的 "find"

image - 如何阅读带有 alpha channel 的动画 gif

Matlab:将ID与数据集(例如结构)相关联?

java - 降低假发的分辨率

java - Avro Map 类型字段不支持默认值

java - 使用反射(不是 JAXB)将 XML 转换为现有的 Java Bean

c# - 给定一个日期范围列表,我如何验证该列表中是否涵​​盖了日期范围内的所有日期?

ios - 使用按钮取消选择 Collection View 中的单元格