2015-09-05 149 views
2

当我尝试打印2D ArrayList,输出看起来是这样的:而不是打印二维数组列表

A B CD E FG H I 

A B C 
D E F 
G H I 

在构造函数中public DenseBoard(T[][] x, T fillElem),我复制2D array的元素进入2D ArrayList。然后,在toString()方法,我循环throught二维ArrayList并输出结果的元素(但我不能得到如我上述所希望的结果)

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); 
    } 
} 

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; 
    } 
} 

回答

3

没有为您的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; 
    } 

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。

+0

能否请您解释一下为什么我不能用'的System.out.println()'用于打印新行代码? – Michael

+2

@Michael:你为什么要有'toString'方法?不要输出到控制台,而是要**建立一个String **。 println对此没有任何贡献。 –

+0

非常感谢! – Michael

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

1

您的toString操作正在打印换行符,然后返回字符串表示形式(它没有)。与result += "\n";

0

首先更换System.out.println();我加了一些记录....

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; 
    } 
} 

后,我跑了几次,它发生,我认为它不是正被作为参数传递一个二维数组在构造函数,所以我想这个代码来解决......

公共类测试仪{

公共静态无效的主要(字串[] 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