How to call MWNumericA​rray.toStr​ing() from Java?

2 ビュー (過去 30 日間)
Mark Frymire
Mark Frymire 2021 年 11 月 23 日
回答済み: surya venu 2024 年 4 月 15 日
The following Java code is an attempt to implement the test code given in the documentation for MWNumericArray(java.lang.Object rVal, MWClassID classid) given here.
import com.mathworks.toolbox.javabuilder.*;
public class MWArrayError {
public static void main(String[] args) {
double[][] AData = {{ 1, 2, 3, 4, 5, 6},
{ 7, 8 , 9, 10, 11, 12},
{13, 14, 15, 16, 17, 18}};
MWNumericArray A = new MWNumericArray(AData, MWClassID.SINGLE);
System.out.println("Array A = \n" + A);
}
}
The (implicit) call to A.toString() in the last line results in the error...
Exception in thread "main" java.lang.RuntimeException: Raised from C++ code using jproxy::throwNamedException
at com.mathworks.toolbox.javabuilder.internal.MWMCR.mxArrayToString(Native Method)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.access$1500(MWMCR.java:33)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$6.mxArrayToString(MWMCR.java:960)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$2.invoke(MWMCR.java:785)
at com.sun.proxy.$Proxy0.mxArrayToString(Unknown Source)
at com.mathworks.toolbox.javabuilder.MWBuiltinArray.toString(MWBuiltinArray.java:180)
at com.mathworks.toolbox.javabuilder.MWNumericArray.toString(MWNumericArray.java:22)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at MWArrayError.main(MWArrayError.java:15)
Could you please tell me how to fix my code to avoid this error? FYI, the call to toString() works for me when A represents a real scalar or single complex value.

回答 (1 件)

surya venu
surya venu 2024 年 4 月 15 日
Hi,
The error you are encountering when calling "toString()" on a "MWNumericArray" object in your Java code is due to the way the "MWNumericArray" class handles multidimensional arrays. To avoid this error and correctly display the contents of your array, you can iterate over the elements of the array and build a string representation manually. Here's how you can modify your code to achieve this:
import com.mathworks.toolbox.javabuilder.*;
public class MWArrayError {
public static void main(String[] args) {
double[][] AData = {{ 1, 2, 3, 4, 5, 6},
{ 7, 8 , 9, 10, 11, 12},
{13, 14, 15, 16, 17, 18}};
MWNumericArray A = new MWNumericArray(AData, MWClassID.SINGLE);
StringBuilder sb = new StringBuilder();
sb.append("Array A = \n");
for (int i = 1; i <= A.numberOfElements(); i++) {
sb.append(A.get(i) + " ");
if (i % A.getDimensions()[0] == 0) {
sb.append("\n");
}
}
System.out.println(sb.toString());
}
}
In this modified code snippet, we create a "StringBuilder" to construct the string representation of the array manually. By iterating over the elements of the "MWNumericArray" and appending them to the "StringBuilder", we can avoid the error caused by the implicit call to "toString()" on a multidimensional array. This approach allows you to display the contents of your array in a readable format without encountering the runtime exception.
Hope it helps.

カテゴリ

Help Center および File ExchangeJava Package Integration についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by