如何将 double[][] 数组转换为 String[][] 数组?

How can i convert double[][] array to String[][] array?

我正在研究它,但我做不到 that.This 代码有地址输出,我想将其从双精度数组转换为字符串数组。这段代码有什么问题。

public static String[][] getStrings(double[][] a) {
    double[][] c = { {2.0, 3.1,3,7}, {1.5,5.8,9.6,1} };
    String[][] s2d = new String[c.length][c.length];
    for (int i = 0; i < s2d.length; i++) {
        for(int j=0; j<s2d[i].length;j++){
            s2d[i][j]=String.valueOf(c);
            System.out.println(s2d);
        }
    }
    return s2d;
}

这是我的输出:

[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
String[][] s2d = new String[c.length][c.length];

应该是

String[][] s2d = new String[c.length][c[0].length];

创建 2x2 矩阵而不是 2x4 矩阵时,您超出了范围

此外,Java 性质的数组没有漂亮的印刷品。 使用 Arrays.deepToString 可以正确输出一个数组。根据@PaulBoddington 的评论修复。

您的代码有几个问题,但直接导致意外输出/结果的问题是这个...

               s2d[i][j]=String.valueOf(c);

...应该是...

               s2d[i][j] = String.valueOf(c[i][j]);

这段代码有几个问题。这里有一个解决方案,比您现有的更直观,不会让您头疼。


说明

在您的方法中,您创建了一个新的 String 数组,其中包含的数组与 double[][] 参数中包含的数组一样多。由于每个数组的大小可能不同,我们没有对其进行初始化。

new String[a.length][];

然后,我们遍历所有双精度数组,使用 Arrays#toString() 将它们转换为 String (我们 trim 第一个和最后一个字符 "[" "]"此方法的输出)并将其拆分为一个字符串数组。


解决方案

public static String[][] getStrings(double[][] a) {
    String[][] output = new String[a.length][];
    int i = 0;
    for (double[] d : a){
        output[i++] = Arrays.toString(d).replace("[", "").replace("]", "").split(",");
    }
    return output;
}

输入

public static void main(String[]a) {
    double[][] ds = { { 2.0, 3.1, 3, 7 }, { 1.5, 5.8, 9.6, 1 } };
    for (String[] s : getStrings(ds)){
        System.out.println(Arrays.toString(s));
    }
}

输出

[2.0,  3.1,  3.0,  7.0]
[1.5,  5.8,  9.6,  1.0]

您的代码有点奇怪...例如,您将 double[][] a 作为参数但从未使用它。 顺便说一句,你得到 "address output" 的原因是因为你将 s2d 中的每个变量设置为具有数组 c 的值而不是单双精度的字符串。

要解决您的问题,您应该使用

s2d[i][j] = String.valueOf(a[i][j]); 而不是 s2d[i][j]=String.valueOf(a);

## ----------


#include <iostream>
#include <string>

using namespace std;
int main()
{
    string line,line0[99];
    double ele[99];
     getline(cin,line);
    for (int x = 0;x <= line.length();x++)
    {
        if (line[x] == ' ')
        {
            step++;
            continue;
        }
        else
        {
            line0[step] += line[x];
        }
    }
    for (int i = 0;i < size_; i++)
    {
        string vo = line0[i];
        ele[i] += stof(vo);
    }
}
```
 ##