通常,ArrayList将以原始类型很好地打印。我需要干净地打印出一个ArrayList,就像原始类型一样。现在它给了我这个:
[java.awt.Point[x=8,y=8], java.awt.Point[x=7,y=9], java.awt.Point[x=6,y=8]
...
我只需要在没有" java.awt.Point"的情况下打印它,我不会那么担心的细节。我不确定我是否可以使用循环执行此操作,以arrayList的索引为目标或...
这是我的代码,它是一个"机器人"在网格中移动:
ArrayList<Point> moves = new ArrayList<Point>();
// code that moves it one square at a time
// and then add the move to an array
moves.add(new Point(this.getX(),this.getY())); // makes a new point, adds it to the array
然后打印:
System.out.println("Robot 1 moves: "+r1.moves);
如果有人有更好的主意,我会对不同的解决方案持开放态度。提前致谢!
答案 0 :(得分:2)
您可以使用增强型for loop
...
for (Point p : r1.moves) {
System.out.println(p.x + "x" + p.y);
}
请查看The for Statement(它位于底部)了解更多详情
答案 1 :(得分:1)
你可能想要创建自己的Point对象(编辑:MadProgrammer公平地惩罚我,因为没有指出你应该有一个束有其他充分的理由来扩展或替换一个内置的在类中除了自定义toString()方法之外),在这种情况下,您可以覆盖toString()方法,或创建一个帮助方法,从您的Points集合中创建格式良好的字符串。
例如:
public string MakeNicePointsString(ArrayList<Point> points)
{
String pointsString = "";
for (int i = 0; i < points.length(); i++)
{
pointsString += "x=" + points[i].x.toString() + "y=" + points[i].y.toString();
}
return pointsString;
}
答案 2 :(得分:1)
Java 8解决方案:
moves.stream().forEach((p)-> System.out.print("[" + p.x +"," + p.y + "]"));
完整示例:
List<Point> lst = new ArrayList<Point>();
lst.add(new java.awt.Point(1,2));
lst.add(new java.awt.Point(1,8));
lst.add(new java.awt.Point(7,2));
lst.add(new java.awt.Point(6,6));
System.out.print("[");
lst.stream().forEach((p)-> System.out.print("[" + p.x +"," + p.y + "]"));
System.out.print("]");
<强>输出强>
[[1,2][1,8][7,2][6,6]]
答案 3 :(得分:0)
重写Point类的toString方法,以便打印x&amp; y坐标。
答案 4 :(得分:0)
我知道这是另一种扩展@MadProgrammer;)因为它定义了一个匿名内部类,但你可以像这样定义toString方法的内联重写:
Point p = new Point(10, 20){
@Override
public String toString(){
return (getX() + ", "+ getY()) + "";
}
};
System.out.println(p); // 10.0, 20.0
仅适用于此实例