[英]FileWriter removing the Java.awt.Point
我正在创建一个程序,它将覆盖位置的坐标。 当将其打印到文件中时,如下所示:
Car id distance #spots
java.awt.Point[x=1,y=1]
java.awt.Point[x=2,y=0]
java.awt.Point[x=1,y=0]
car0 java.awt.Point[x=0,y=0] java.awt.Point[x=1,y=0] 1
car1 java.awt.Point[x=2,y=0] java.awt.Point[x=2,y=0] 2
我试图摆脱显示的java.awt.Point,所以它只显示坐标。
这是我的代码:public void saveGrid(File name)throws FileNotFoundException {
ArrayList<Car> cars = getCars();
ArrayList<ParkingSpot> spots = getSpots();
PrintWriter fileWriter;
try {
fileWriter = new PrintWriter(name);
fileWriter.println("hi");
fileWriter.println("\n\nCar id distance #spots\n");
fileWriter.println(getPartyLocation());
for(ParkingSpot spot: spots){
fileWriter.println(spot.getLocation());
fileWriter.println("");
}
for (Car car: cars) {
fileWriter.println(car.getId() + " " + car.getStart() + " " + car.getLocation() + " " + car.getNumSpotsTried());
fileWriter.println("");
}
fileWriter.close();
} catch (FileNotFoundException e) {
System.err.println("FileWriting error:" + e);
e.printStackTrace();
}
当您将car.getLocation()
添加到字符串中时,您将添加一个Point
对象。 使用toString()
将其隐式转换为字符串。 java.awt.Point
的toString
方法是:
public String toString() {
return getClass().getName() + "[x=" + x + ",y=" + y + "]";
}
本质上是:
public String toString() {
return "java.awt.Point[x=" + x + ",y=" + y + "]";
}
不必依赖此默认行为,可以执行以下操作:
// Get the car's location.
Point loc = car.getLocation();
// Create a string representation: [x,y]
String locString = "[" + loc.x + "," + loc.y + "]";
// Add the line with all the other stuff
fileWriter.println(car.getId() + " " + car.getStart() + " " + locString + " "
+ car.getNumSpotsTried());
正在打印java.awt.Point
东西是因为您的gridSave方法隐式调用了java.awt.Point.toString()
……这就是它产生的结果。 (典型的toString()
设计为产生调试输出,并且在该上下文中包括类名是适当的。)
您的可能性是:
toString()
方法编写您自己的Point
类,该方法以所需的格式输出位置。 java.awt.Point
的子类,该子类重写toString()
方法。 Point.toString()
方法。 而是编写一个String formatLocation(Point)
方法来格式化Point
格式,然后在gridSave
方法中使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.