ЛР3. Задание 2
This commit is contained in:
parent
b784617677
commit
8d2d9f7ac3
@ -22,6 +22,7 @@ public class LR_3 implements ILabRab {
|
|||||||
LR_3_Tasks.getInstance().task1();
|
LR_3_Tasks.getInstance().task1();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
LR_3_Tasks.getInstance().task2();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
break;
|
break;
|
||||||
|
@ -29,6 +29,14 @@ public class Ellipse implements Serializable {
|
|||||||
points = Arrays.copyOf(ellipse.points, POINTS);
|
points = Arrays.copyOf(ellipse.points, POINTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Point[] getPoints() {
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPoint(int index, Point point) {
|
||||||
|
points[index] = point;
|
||||||
|
}
|
||||||
|
|
||||||
public static Point getCenterPoint(Ellipse ellipse) {
|
public static Point getCenterPoint(Ellipse ellipse) {
|
||||||
return ellipse.getCenterPoint();
|
return ellipse.getCenterPoint();
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,15 @@ package tse.lr3;
|
|||||||
|
|
||||||
import tse.lr2.*;
|
import tse.lr2.*;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -42,13 +46,41 @@ public class LR_3_Tasks {
|
|||||||
|
|
||||||
public void task2() {
|
public void task2() {
|
||||||
makeObjects();
|
makeObjects();
|
||||||
|
boolean needCreateCSV = false;
|
||||||
ArrayList<Ellipse> ellipses = new ArrayList<>();
|
ArrayList<Ellipse> ellipses = new ArrayList<>();
|
||||||
ellipses.add(ellipse1);
|
if (needCreateCSV) {
|
||||||
ellipses.add(ellipse2);
|
ellipses.add(ellipse1);
|
||||||
ellipses.add(ellipse3);
|
ellipses.add(ellipse2);
|
||||||
ellipses.add(circle1);
|
ellipses.add(ellipse3);
|
||||||
ellipses.add(circle2);
|
ellipses.add(circle1);
|
||||||
printList(ellipses);
|
ellipses.add(circle2);
|
||||||
|
printList(ellipses);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Создаём при необходимости CSV-файл.
|
||||||
|
if (needCreateCSV) {
|
||||||
|
writeToCSV("ellipses.csv", ellipses);
|
||||||
|
ellipses = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Читаем список из CSV
|
||||||
|
ellipses = (ArrayList) readFromCSV("ellipses.csv");
|
||||||
|
System.out.println("Прочитано из csv");
|
||||||
|
printList(ellipses);
|
||||||
|
|
||||||
|
// Сериализуем список в бинарный файл
|
||||||
|
serialize("t2_list.ser", ellipses);
|
||||||
|
ellipses = null;
|
||||||
|
|
||||||
|
// Десериализуем список из файла
|
||||||
|
ellipses = (ArrayList) deserialize("t2_list.ser");
|
||||||
|
System.out.println("Десериализовано из бинарного файла");
|
||||||
|
printList(ellipses);
|
||||||
|
System.out.println("Готово");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void task5() {
|
public void task5() {
|
||||||
@ -96,10 +128,79 @@ public class LR_3_Tasks {
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeToCSV(String filename, List<Ellipse> list) throws IOException {
|
||||||
|
BufferedWriter writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(new FileOutputStream(filename), "UTF-8")
|
||||||
|
);
|
||||||
|
writer.write("Класс,X1,Y1,X2,Y2,X3,Y3,X4,Y4");
|
||||||
|
for (Ellipse ellipse : list) {
|
||||||
|
writer.newLine();
|
||||||
|
writeCsvLine(writer, ellipse);
|
||||||
|
}
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeCsvLine(BufferedWriter writer, Ellipse ellipse) throws IOException {
|
||||||
|
final String SEPARATOR = ",";
|
||||||
|
writer.write(ellipse.getClass().getName());
|
||||||
|
Point[] points = ellipse.getPoints();
|
||||||
|
for (Point point : points) {
|
||||||
|
writer.write(SEPARATOR);
|
||||||
|
writer.write(String.valueOf(point.x));
|
||||||
|
writer.write(SEPARATOR);
|
||||||
|
writer.write(String.valueOf(point.y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Ellipse> readFromCSV(String filename) throws IOException {
|
||||||
|
List<Ellipse> list = new ArrayList<>();
|
||||||
|
BufferedReader reader = new BufferedReader(
|
||||||
|
new InputStreamReader( new FileInputStream(filename), "UTF-8" )
|
||||||
|
);
|
||||||
|
reader.readLine(); // Класс,X1,Y1,X2,Y2,X3,Y3,X4,Y4
|
||||||
|
String line;
|
||||||
|
while ( (line = reader.readLine()) != null ) {
|
||||||
|
Ellipse ellipse = null;
|
||||||
|
try {
|
||||||
|
ellipse = readFromCsvLine(line);
|
||||||
|
} catch (RuntimeException ex) {
|
||||||
|
System.out.println(ex.toString());
|
||||||
|
}
|
||||||
|
if (ellipse != null) list.add(ellipse);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Ellipse readFromCsvLine(String line) {
|
||||||
|
final int POINTS_COUNT = 4;
|
||||||
|
if (line.isEmpty()) throw new RuntimeException("Пустая строка");
|
||||||
|
String[] params = line.split(",");
|
||||||
|
if (params.length < 9) throw new RuntimeException("Неверное количество параметров");
|
||||||
|
|
||||||
|
final int[] coords = new int[POINTS_COUNT * 2];
|
||||||
|
for (int i = 0; i < coords.length; i++) {
|
||||||
|
coords[i] = Integer.parseInt(params[i + 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ellipse out;
|
||||||
|
if (params[0].equalsIgnoreCase(Circle.class.getName())) {
|
||||||
|
out = new Circle();
|
||||||
|
} else {
|
||||||
|
out = new Ellipse();
|
||||||
|
}
|
||||||
|
for (int i = 0; i < POINTS_COUNT; i++) {
|
||||||
|
out.setPoint(i, new Point(coords[i * 2], coords[i * 2 + 1]));
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
private void printList(List<Ellipse> list) {
|
private void printList(List<Ellipse> list) {
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
Ellipse ellipse = list.get(i);
|
Ellipse ellipse = list.get(i);
|
||||||
System.out.println( String.format("%2d. %f", i + 1, ellipse.getSquare()) );
|
System.out.println( String.format("%2d. %s: Площадь %f\n", i + 1,
|
||||||
|
ellipse.getClass().getName(), ellipse.getSquare()) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user