-1

我正在创建一个程序,它将打印一个位置的坐标。当它打印到文件中时,它看起来像这样:

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

2 回答 2

3

当您添加car.getLocation()到字符串时,您正在添加一个Point对象。它被隐式转换为字符串toString()。的toString方法java.awt.Point是:

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());
于 2013-05-11T03:30:18.583 回答
1

java.awt.Point正在打印这些东西是因为您的 gridSave 方法正在隐式调用java.awt.Point.toString()......这就是它产生的结果。(典型toString()的设计用于产生调试输出,并且在该上下文中包含类名是合适的。)

你的可能性是:

  • 使用以所需格式输出位置的方法编写您自己的Point类。toString()
  • 创建一个java.awt.Point覆盖该toString()方法的子类。
  • 不要使用该Point.toString()方法。相反,编写一个String formatLocation(Point)方法来格式化Point您想要的格式,并在您的gridSave方法中使用它。
于 2013-05-11T05:23:26.640 回答