Notepad.txtにリンクされたリストを保存します
-
19-09-2019 - |
質問
私は多くの三角形のポリゴンを描画し、リンクリストに格納します。私の問題は、私はメモ帳ファイルに図面を保存する際に、データが読めない(変な記号)である、ということです。私はそれが出力を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");
}
}
<時間>
EDITEDます:
私はすべての提案を試してみましたが、それでも私は、次のような出力を得るために管理することはできません。私も「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ポリゴンクラスを使用していることを、ここで想定しています。 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を使用しています。私は私のためにクラスを作成するためにクイックフィックスを実行します)のは、それを作成してみましょう。
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)。