【问题标题】:How can i convert double[][] array to String[][] array?如何将 double[][] 数组转换为 String[][] 数组?
【发布时间】:2015-11-18 23:03:21
【问题描述】:

我正在处理它,但我做不到。这段代码有地址输出,我想从双数组转换为字符串数组。这段代码有什么问题。

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

【问题讨论】:

  • 请发布任何编译器错误、异常堆栈跟踪或不正确的输出。
  • 请问?您认为以下语句会发生什么:“s2d[i][j]=String.valueOf(c);”?
  • 这是打印数组System.out.println(Arrays.deepToString(s2d));的方式。
  • 我尝试将字符串数组的值实现为双精度数组。
  • 啊,我不知道 deepToString。编辑我的答案以引用它,而不仅仅是 toString。谢谢@PaulBoddington

标签: java arrays string double


【解决方案1】:

这段代码有几个问题。这是一个解决方案,比您现有的更直观,可以让您摆脱头痛。


说明

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

new String[a.length][];

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


解决方案

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]

【讨论】:

    【解决方案2】:

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

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

    ...应该是...

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

    【讨论】:

    • 我也这样做了,但结果没有改变。
    • 很好,错过了那个。但这仍然会有相同的输出,因为数组的 toString 方法是类型 + 它的 id
    • @mascoj 好吧,不,因为c[i][j] 是数组元素,一个doubleString 值具有我认为的预期形式。
    • 也许你误会了我。 @mancini13 没有 Arrays.toString,他只是在打印数组本身。默认的数组 toString 方法(通过 Object 提供的方法)只输出“[[L;id”。在这种情况下,“[[Ljava.lang.String;2a139a55”
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:
      String[][] s2d = new String[c.length][c.length];
      

      应该是

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

      当您创建一个 2x2 矩阵而不是 2x4 时,您超出了您的界限

      此外,Java 本质上的数组没有漂亮的打印效果。 使用Arrays.deepToString 正确输出数组。根据@PaulBoddington 的评论修复。

      【讨论】:

      • 我这样做了,但我又得到了相同的输出。
      【解决方案5】:
      ## ----------
      
      
      #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);
          }
      }
      ```
       ##
      

      【讨论】:

      • 问题很明显是关于 Java 的,但您已经发布了 C++ 代码。
      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多