【问题标题】:2 dimensional array to string code java二维数组到字符串代码java
【发布时间】:2013-11-30 21:18:40
【问题描述】:

对于我必须编写的程序,我需要将单个数字整数的二维数组转换为由空格分隔的数字字符串。为我提供了一个测试代码,当我运行它时,我的代码在两个 arrayToString 测试中都失败了。我无法找到我的逻辑错误在哪里。有人帮忙!

public static String arrayToString(int[][] a) {

    String aString;     
    aString = "";
    int column;
    int row;

    for (row = 0; row < a.length; row++) {
        for (column = 0; column < a[0].length; column++ ) {
        aString = aString + " " + a[row][column];
        }
    aString = aString + "\n";
    }

    return aString;
}

【问题讨论】:

  • 也许它不喜欢每行开头的多余空间。能不能把测试代码贴出来让我们看看?
  • 由于您的代码按预期工作,您必须告诉我们预期的输出(又名:测试)是什么样的。
  • 它可能是开头的额外空间,但是当我这样做时我没有看到输出中的空间。我在哪里可以发布测试代码供大家查看? @大卫华莱士
  • 编辑问题。将测试代码附加到它。

标签: java arrays tostring multidimensional-array


【解决方案1】:

我能想到三个可能的问题。

  1. 测试代码不想看到您在每行开头放置的空格。
  2. 测试代码正在传递一个数组,其中一些条目为空。您的代码无法解决这个问题。
  3. 测试代码正在传递一个数组,其中条目具有不同的长度。您的代码也无法解决这个问题。

在您发布测试代码之前,我们看不出是哪一个问题。但是您可以通过将循环更改为此来处理所有这三个问题。

for (row = 0; row < a.length; row++) {
    if (a[row] != null && a[row].length > 0) {
        aString = aString + a[row][0];

        for (column = 1; column < a[row].length; column++) {
            aString = aString + " " + a[row][column];
        }
    }
    aString = aString + "\n";
}

【讨论】:

    【解决方案2】:
    int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
    
    public static String arrayToString(int[][] a) {
    
        String aString;     
        aString = "";
        int column;
        int row;
    
        for (row = 0; row < a.length; row++) {
            for (column = 0; column < a[0].length; column++ ) {
            aString = aString + " " + a[row][column];
            }
        aString = aString + "\n";
        }
    
        return aString;
    }
    

    输出:

    1 2 3
    4 5 6
    7 8 9
    

    如果你跳过这一行aString = aString + "\n";,你的输出将如下所示

    1 2 3 4 5 6 7 8 9
    

    【讨论】:

      【解决方案3】:

      @dawood-ibn-kareem 解释一下测试失败的可能原因。

      使用 Java 8 Stream,可以很容易地做你想做的事!

      输入:[[1,2,3], [3,4,5], [5,6,7]]

      public static String arrayToString(int[][] a) {
          return Arrays.stream(a)
                  .map(s -> Arrays.stream(s)
                                  .mapToObj(String::valueOf)
                                  .collect(Collectors.joining(" "))
                  )
                  .collect(Collectors.joining("\n"));
      }
      

      输出:

      1 2 3
      3 4 5
      5 6 7
      

      其他方法,将二维数组的每一行分开,不回车

      public static String arrayToString(int[][] a) {
          return Arrays.stream(a)
                  .flatMapToInt(Arrays::stream)
                  .mapToObj(String::valueOf)
                  .collect(Collectors.joining(" "));
      }
      

      输出

      1 2 3 3 4 5 5 6 7
      

      玩得开心!

      【讨论】:

        【解决方案4】:

        您的代码基本上没问题,只是您在每行的开头放置了一个前导空格。要在返回之前清理它们,请添加以下行:

        aString = aString.replaceAll("(?m)^ ", "");
        

        这使用正则表达式删除(通过替换为空白)行首的所有空格。正则表达式标志(?m) 使^ 匹配输入的每一行的开头(通常^ 仅匹配输入的开头)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-19
          • 2021-06-12
          • 2019-09-14
          • 1970-01-01
          • 2019-02-18
          • 2013-10-10
          • 2018-05-19
          • 2018-07-24
          相关资源
          最近更新 更多