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

标签 java apache complex-numbers

我试图以 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如下,调用format()单个数字类型的方法 Complex每次:

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特别是,您应该注意到,如果您 instantiate it with no arguments (正如我上面所做的),它默认为 x + yi格式。如果您想使用该格式,可以在实例化格式化程序时传递参数,如这些文档中所述。

关于java - 如何将 List<Complex> 打印为 x+iy 格式的数组 [ 使用 Apache Common Math - Complex ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751181/

相关文章:

java - 使用 Shebang 运行 nashorn 不接受 -cp 选项

java - AnnotationSessionFactoryBean 和单例作用域 bean(Spring 框架)

php - XAMPP 服务器错误(错误 500)

php - 将 www.foo.com 重定向到 www.bar.com

c++ - 使用clog计算复数的自然对数时,如何解决出现的歧义?

python - numpy 读取带有复数的 .csv

java - 使用SQL存储过程我们可以得到以下输出吗?或者在代码本身中处理它?

java - 找不到属性异常 org.springframework.beans.factory.UnsatisfiedDependencyException :

apache - 使用 apache + mod_rewrite 重写基于访问日志 - 可能吗?

javascript - 加速我的复杂函数绘图仪(canvas+javascript)