打印二维数组列表
Printing 2D Arraylist
当我尝试打印 2D ArrayList
时,输出如下所示:
A B CD E FG H I
而不是:
A B C
D E F
G H I
在构造函数public DenseBoard(T[][] x, T fillElem)
中,我将二维array
的元素复制到二维ArrayList
中。然后,在 toString()
方法中,我循环遍历 2D ArrayList
的元素并输出结果(但我无法获得我上面提到的所需结果)
Class 测试人员
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;
}
}
在您的 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。
问题出在您的 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()
returns 系统相关的行分隔符字符串。
请注意,您应该考虑使用 StringBuilder
而不是连接到 String
。
您的 toString 操作正在打印换行符,然后返回字符串表示形式(具有 none)。将 System.out.println();
替换为 result += "\n";
首先我添加了一些日志....
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 测试员 {
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
当我尝试打印 2D ArrayList
时,输出如下所示:
A B CD E FG H I
而不是:
A B C
D E F
G H I
在构造函数public DenseBoard(T[][] x, T fillElem)
中,我将二维array
的元素复制到二维ArrayList
中。然后,在 toString()
方法中,我循环遍历 2D ArrayList
的元素并输出结果(但我无法获得我上面提到的所需结果)
Class 测试人员
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;
}
}
在您的 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。
问题出在您的 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()
returns 系统相关的行分隔符字符串。
请注意,您应该考虑使用 StringBuilder
而不是连接到 String
。
您的 toString 操作正在打印换行符,然后返回字符串表示形式(具有 none)。将 System.out.println();
替换为 result += "\n";
首先我添加了一些日志....
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 测试员 {
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