如何将 List<Complex> 打印为 x+iy 格式的数组 [使用 Apache Common Math - Complex]

How to print List<Complex> to array of x+iy format [ Using Apache Common Math - Complex ]

我试图以 x+iy 格式打印复数的所有 n 个根。我正在使用 Apache Common Math 。这是我的代码:

package complex;
import static java.lang.String.format;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.math3.complex.Complex;
import org.apache.commons.math3.complex.ComplexFormat;
public class Do 
{
public static void main(String[] args) 
{
    ComplexFormat complexFormat = new ComplexFormat();
    Complex r = new Complex(6.3,9.6);
    List<Object> list = new ArrayList();
    list.add(r.nthRoot(8));
    List list2 = new ArrayList();
    for(int i=list.size()-1;i>=0;i--)
    {
        String c = (list.get(i).toString());
       list2.add(c);
    }

    System.out.println(Arrays.toString(list2.toArray()));
}
}

我的输出没问题

输出:

run:
[[(1.346389790047983, 0.16747833178910174), (0.8336162865533764,     1.070466414773145), (-0.16747833178910165, 1.346389790047983), (-1.070466414773145, 0.8336162865533764), (-1.346389790047983, -0.16747833178910157), (-0.8336162865533766, -1.070466414773145), (0.1674783317891015, -1.346389790047983), (1.070466414773145, -0.8336162865533766)]]
BUILD SUCCESSFUL (total time: 0 seconds)

但我想要它在 x+iy 格式的数组或列表中。我在每个列表项上都尝试了 complexFormat.Parse()complexFormat.format(),但这种情况会产生异常。

你能解释一下更好的方法吗?

您需要按如下方式使用ComplexFormat,每次对Complex类型的单个数字调用format()方法:

formatter = new ComplexFormat();
for (Complex c : list2)
{
    System.out.println(formatter.format(c));
}

此代码应替换您当前的行 System.out.println(Arrays.toString(list2.toArray()));,您就可以开始了...

但是...

您可能不需要创建和使用 list2 的麻烦,只需将 list 设置为 List<Complex> 而不是 List<Object> 并直接使用它。所以最终版本的削减代码可能是:

package complex;
import java.util.List;
import org.apache.commons.math3.complex.Complex;
import org.apache.commons.math3.complex.ComplexFormat;
public class Do 
{
  public static void main(String[] args) 
  {
    ComplexFormat complexFormat = new ComplexFormat();
    Complex r = new Complex(6.3,9.6);
    List<Complex> list = r.nthRoot(8);
    for (Complex c : list)
    {
        System.out.println(complexFormat.format(c));
    }
  }
}

输出

1.34638979 + 0.1674783318i
0.8336162866 + 1.0704664148i
-0.1674783318 + 1.34638979i
-1.0704664148 + 0.8336162866i
-1.34638979 - 0.1674783318i
-0.8336162866 - 1.0704664148i
0.1674783318 - 1.34638979i
1.0704664148 - 0.8336162866i

注意 - ComplexFormat 的文档是 here and, in particular, you should notice that if you instantiate it with no arguments(正如我在上面所做的),它默认为 x + yi 格式。如果您想使用格式,请在实例化格式化程序时传递参数,如这些文档中所述。