我绘制许多三角形多边形,并将其存储在链接列表。我的问题是,当我绘制存储在一个记事本文件,数据无法读取(奇怪的符号)。当我尝试打印使用它的println输出是这样java.awt.Polygon@1d6096。

如何存放在记事本中多边形的坐标?

... 
java.util.List<Polygon> triangles = new LinkedList<Polygon>();
String pathname = "eyemovement.txt";
...
int[] xs = { startDrag.x, endDrag.x, midPoint.x };
int[] ys = { startDrag.y, startDrag.y, midPoint.y }; 
triangles.add(new Polygon(xs, ys,3));

...
public void actionPerformed(ActionEvent e) {
   if(e.getSource() == saveBtn){
      try {
      FileOutputStream fos = new FileOutputStream(pathname);
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      oos.writeObject(triangles);
      oos.flush();
      oos.close();
      fos.close();
  }
  catch (Exception ex) {
    System.out.println("Trouble writing display list vector");
  }
}

编辑:

我已经尝试了所有的建议,但我仍然不能设法得到的输出如下所示。我曾尝试“的PrintWriter”为好,但我不能解决了这个问题。帮助我,请我的头好重本: - (

我画三角形,进行更改,并将其存储在链表。画完后,并进行修改,我点击保存按钮,并将其与希望,我会在记事本中输出像这样保存Notepad.txt:

40 60 50这个线表示顶点的三角形1,点击两个X 40 40 50这个线表示顶点的三角形1的伊苏

60 80 70 2三角结果 60 60 70

100 120 110 3三角形搜索 100 100 110

有帮助吗?

解决方案

实际上没有人发布这样做绝对的最简单的方法,所以在这里不言而喻。

以一个Polygon p,输出表示p的x / y坐标的形式的(假设p具有至少1点) “(X1 Y1,X2 Y2,X3 Y3,...)” 的字符串:

System.out.print("(" + p.xpoints[0] + p.ypoints[0]);
for (int i = 0; i < p.npoints; i++) {
  System.out.print(", " + p.xpoints[i] + " " + p.ypoints[i]);
}
System.out.println(")");

其他提示

如果您只想存储坐标,只有想写一个方法(到文件),那么你应该在你的多边形写重载方法:

String toString() {
  return this.x + ", " + this.y;
}

或类似的东西。

当然的数据是不可读的。这是“数据”,而不是“文本”。你必须与ObjectInputStream类再次读取该文件。使用的方法`的readObject();该方法返回一个对象。当然,你必须将其丢在这种方式:

Object o = ois.readObject(); // ois is the ObjectInputStream
List<Polygon> list = new ArrayList<Polygon>((List) o));

我觉得你只是想保存的三角形,继续关闭程序后,与它一起工作。

我开始与一个测试用例。

import java.awt.Polygon;

import junit.framework.TestCase;

public class PolygonTest extends TestCase {
    public void testToString() throws Exception {
        Polygon polygon = new Polygon();
        polygon.addPoint(0, 1);
        polygon.addPoint(1, 1);
        polygon.addPoint(1, 0);
        assertEquals("(0,1;1,1;1,0)", polygon.toString());
    }
}

我在此假设您正在使用AWT Polygon类。这个测试失败,因为AWT的多边形类没有覆盖缺省行为。但是多边形有很多的好东西在里面,你不想失去(也许),所以要加,我们希望新的行为(一个toString()方法),让我们改变这只是一点点:

import java.awt.Polygon;

import junit.framework.TestCase;

public class PolygonTest extends TestCase {
    public void testToString() throws Exception {
        Polygon polygon = new Triangle();
        polygon.addPoint(0, 1);
        polygon.addPoint(1, 1);
        polygon.addPoint(1, 0);
        assertEquals("(0,1;1,1;1,0)", polygon.toString());
    }
}

这甚至不编译,因为三角类尚不存在。因此,让我们创建它(我使用eclipse,我会跑的QuickFix创建类对我来说):

import java.awt.Polygon;

public class Triangle extends Polygon {

}

和现在的测试编译,但如之前失败。因此,让我们写出toString()方法:

import java.awt.Polygon;

public class Triangle extends Polygon {
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("(");
        for (int i = 0; i < npoints; i++) 
            sb.append(String.format("%s,%s;", xpoints[i], ypoints[i]));
        sb.deleteCharAt(sb.length() - 1); // get rid of the final semicolon
        sb.append(")");
        return sb.toString();
    }
}

和现在测试通过。

请注意,我改变的格式从你的要求是什么一点点,因为我认为你可能希望能够点(5,17)和点之间进行区分(51,7)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top