【问题标题】:Printing arrays without a separator打印不带分隔符的数组
【发布时间】:2015-08-16 01:17:20
【问题描述】:

我已经为此苦苦挣扎了一段时间。我被分配做一个程序,该程序接受用户的输入并输出相同的单词,但用星号编写,为此,我必须为字母表中的每个字母做一个数组。像这样:

String A [][]= new String [5][5];

        A[0][0]=" ";
        A[0][1]= "*";
        A[0][2]="*";
        A[0][3]="*";
        A[0][4]=" ";
        A[1][0]="*";
        A[1][1]=" ";
        A[1][2]=" ";
        A[1][3]=" ";
        A[1][4]="*";
        A[2][0]="*";
        A[2][1]="*";
        A[2][2]="*";
        A[2][3]="*";
        A[2][4]="*";
        A[3][0]="*";
        A[3][1]=" ";
        A[3][2]=" ";
        A[3][3]=" ";
        A[3][4]="*";
        A[4][0]="*";
        A[4][1]=" ";
        A[4][2]=" ";
        A[4][3]=" ";
        A[4][4]="*";

我一直在尝试打印它们以查看完成后的效果,我一直在尝试使用System.out.println(Arrays.deepToString(A)); 打印它 但是我得到的输出是这样的,就是数组的第一行

[[ , *, *, *,  ], [*,  ,  ,  , *], [*, *, *, *, *], [*,  ,  ,  , *], [*,  ,  ,  , *]]

而不是这样:

是否有一个参数我必须添加到我已经拥有的 println 中,还是我必须使用另一种打印方法?

【问题讨论】:

  • 您可以使用例如for-loop 来打印它吗?我在这里很困惑......

标签: java arrays printing


【解决方案1】:

Arrays.deepToString 的行为与您预期的不同。

它的作用是递归打印数组的每个数组,因此是 deep 字。

这里是 javadoc 的一部分,它很清楚它打印的内容:

字符串表示由数组元素的列表组成, 括在方括号(“[]”)中。相邻元素由 字符“,”(逗号后跟一个空格)。元素是 通过 String.valueOf(Object) 转换为字符串,除非它们是 自己的数组。

您可以使用 for 循环轻松打印您想要的内容:

for (String[] A1 : A) {
    for (String A2 : A1) 
        System.out.print(A2);

    System.out.println();
} 

【讨论】:

    【解决方案2】:

    正如@Jean-François Savard 所说,Arrays.deepToString 在数组末尾不支持newline

    但在Java8 中,您可以使用stream 来缩短您的代码:

    Arrays.stream(A).forEach(t -> System.out.println(String.join(" ", t)));
    

    【讨论】:

    • 但是标题中指定的 OP 他要打印不带分隔符。您的代码将打印括号和逗号。
    • 我们都知道,除了循环 2,没有其他方法可以做到,我只是提供另一种方法?对吗?
    • 不,你的方式不适合。正如我所说,它会打印括号和逗号,这是 OP 想要避免的。
    • 我一直在尝试打印它们,看看我完成后会是什么样子,他只是想通过输出来检查它。
    • 但随后他举例说明了他希望如何查看它们,并且问题标题没有分隔符。
    【解决方案3】:

    做一个双for循环。示例:

    for(int i=0; A.length; i++){
        for(int j=0; A[i].length; j++)
            System.out.print(A[i][j]);
         System.out.println();
    }
    

    如果这不起作用,只需在

    中切换 i 和 j 变量
    System.out.print(A[i][j]);
    

    当您使用 deepToString() 方法时,它会将数组放入您收到的格式。如果您只想要原始数据,那么您可以使用我向您展示的方法,使用 for 循环。

    【讨论】:

    • 谢谢!它确实有效!...有点,不得不调整它一个 TIIIINY 位,而不是 i
    【解决方案4】:

    你可以这样打印:

    public void print(final String[][] array) {
      // make sure 'array' has "something"
      for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[i].length; j++) {
          System.out.printf("%s", array[i][j]);
          // ...or use this since I'm not sure the dashes were there on purpose
          //System.out.printf("%s", " ".equalsIgnoreCase(array[i][j]) ?
          //    "-" : array[i][j]);
        }
        System.out.println();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多