打印二维ArrayList

4

当我尝试打印二维 ArrayList 时,输出结果看起来像这样:

A B CD E FG H I

改为:

A B C
D E F
G H I

在构造函数 public DenseBoard(T[][] x, T fillElem) 中,我将二维数组的元素复制到二维 ArrayList 中。然后,在 toString() 方法中,我循环遍历二维 ArrayList 的元素并输出结果(但是我无法得到所需的结果,如上所述)。
Tester
public class Tester {

    public static void main(String[] args){

        String[][] myString = {{"A B C"}, {"D E F"}, {"G H I"}};
        DenseBoard<String> temp1 = new DenseBoard<String>(myString, "a");
        System.out.println(temp1);
    }
}

Class DenseBoard

import java.util.*;
public class DenseBoard <T> {

    private T element;
    private ArrayList<ArrayList<T>> myBoard;

    public DenseBoard(T[][] x, T fillElem){
        this.myBoard = new ArrayList<ArrayList<T>>();
        this.element = fillElem;

        for(int i = 0; i < x.length; i++){
            ArrayList<T> values = new ArrayList<T>();
            for(int j = 0; j < x[i].length; j++){
                values.add(x[i][j]);
            }
            myBoard.add(values);
        }
    }

    public String toString(){
        String result = "";
        for(int i = 0; i < myBoard.size(); i++){
            for(int j = 0; j < myBoard.get(i).size(); j++){
                result += myBoard.get(i).get(j);
            }
            System.out.println();
        }
        return result;
    }
}
4个回答

4

在您的toString方法中没有println的位置,因为它的作用是构建一个字符串,而不是将任何内容输出到标准输出。
请改为:

 public String toString(){
      String result = "";
      for(int i = 0; i < myBoard.size(); i++){
          for(int j = 0; j < myBoard.get(i).size(); j++){
              result += myBoard.get(i).get(j);
          }
          System.out.println();
      }
      return result;
  }

to

 public String toString(){
      String result = "";
      for(int i = 0; i < myBoard.size(); i++){
          for(int j = 0; j < myBoard.get(i).size(); j++){
              result += myBoard.get(i).get(j);
          }
          // System.out.println();
          result += "\n";
      }
      return result;
  }

除此之外,如果该方法需要频繁调用,请考虑使用StringBuilder。


请问为什么我不能在这段代码中使用 System.out.println() 来打印新行? - Michael
2
@Michael:你为什么要有一个 toString 方法?不是为了输出到控制台,而是为了构建一个字符串。println 对此没有任何贡献。 - Hovercraft Full Of Eels

1
你的toString操作正在打印换行符,然后返回字符串表示形式(其中没有任何内容)。请用result += "\n";替换System.out.println();

1
问题出在你的toString方法中:你从未添加换行符。相反,你调用了System.out.println();,它会打印一个换行符。
public String toString(){
    String result = "";
    for(int i = 0; i < myBoard.size(); i++){
        for(int j = 0; j < myBoard.get(i).size(); j++){
            result += myBoard.get(i).get(j);
        }
        result += System.lineSeparator();
    }
    return result;
}

System.lineSeparator() 返回系统相关的换行符字符串。

请注意,应考虑使用 StringBuilder 而不是将多个字符串连接为一个 String


0

首先,我添加了一些日志记录...

import java.util.*;
public class DenseBoard <T> {
private T element;
    private ArrayList<ArrayList<T>> myBoard;

 public DenseBoard(T[][] x, T fillElem){
      this.myBoard = new ArrayList<ArrayList<T>>();
      this.element = fillElem;

      for(int i = 0; i < x.length; i++){
         ArrayList<T> values = new ArrayList<T>();
          for(int j = 0; j < x[i].length; j++){
              T nextElement = x[i][j];
              System.err.println(String.format("adding x[%1$d][%2$d] (%3$s)", i, j, nextElement));
              values.add(x[i][j]);
          }
          System.err.println(String.format("added %1$d elements", values.size()));
          myBoard.add(values);
      }
  }
 public String toString(){
      String result = "";
      for(int i = 0; i < myBoard.size(); i++){
          for(int j = 0; j < myBoard.get(i).size(); j++){
              result += myBoard.get(i).get(j);
          }
          // replaced the call to System.out.println() with "\n"..
          result+= "\n";

      }
      return result;
  }
}

我运行了几次后,意识到传递给构造函数的参数并不是一个二维数组,因此我尝试使用以下代码进行修复...

public class Tester {

public static void main(String[] args){

        String[][] myString = {{"A", "B", "C"}, {"D", "E", "F"}, {"G","H", "I"}};
        DenseBoard<String> temp1 = new DenseBoard<String>(myString, "a");
        System.out.println(temp1);
    }
}

现在我得到的输出是...

$ java Tester
adding x[0][0] (A)
adding x[0][1] (B)
adding x[0][2] (C)
added 3 elements
adding x[1][0] (D)
adding x[1][1] (E)
adding x[1][2] (F)
added 3 elements
adding x[2][0] (G)
adding x[2][1] (H)
adding x[2][2] (I)
added 3 elements
ABC
DEF
GHI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接