Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
80
Добавлен:
14.02.2015
Размер:
204.29 Кб
Скачать

СТО АлтГТУ 13.62.1.0667-2011

Лабораторная работа №5. Коллекции

Цель работы: получить практические навыки работы с коллекциями объектов

5.1 Пример создания коллекции объектов с использованием интерфейса List и класса ArrayList

В листинге 5.1 представлена программа, которая рассчитывает координаты для перемещения на плоскости геометрической фигуры круг. Для круга также выполняется вычисление его площади. В программе описан абстрактный класс shape и на его основе производный класс Circle. Класс CircleList используется для работы с коллекцией List объектов класса Circle.

Программа выполнена в NetBeans IDE 7.3.1. На рис. 5.1. показан состав проекта программы. Рисунок 5.2 демонстрирует результат выполнения программы

Рисунок 5.1 – Состав проекта программы

Листинг 5.1

// Shape.java

package shape;

// базовый класс фигура

public abstract class Shape

{ protected String type;

public Shape() { }

public Shape(String t) { type = t; }

public String GetShape() { return type; }

public abstract void Move(double x1, double y1);

}

// Circle.java

package shape;

// производный класс круг

public class Circle extends Shape implements Comparable<Circle>

{ private double x, y, r;

public Circle(){ }

public Circle(String t, double x1, double y1, double r1)

{ super(t); x = x1; y = y1; r = r1; }

public String toString()

{ return "\n" + type + ". Координаты центра: x = " + x + ", y = " + y + ", r = " + r;

}

//переопределение метода Move

public void Move(double x1, double y1)

{ x += x1; y += y1;

String msg = "Новые координаты центра " + x + " " + y;

System.out.println(type + ". Результат перемещения: " + msg);

}

public double GetSquare()//вычисление площади

{ return Math.PI * Math.pow(r, 2); }

public int compareTo( Circle Cl)

{ int res = 0;

if(Cl.r < this.r) { res = 1; }

if(Cl.r > this.r) { res = -1;}

return res;

}

}

// CircleList.java

package shape;

import java.util.Scanner;

import java.util.List;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.Collections;

public class CircleList

{

private List<Circle> clist = new ArrayList<Circle>();

public void add( Circle obj) { clist.add(obj);}

public int count() { return clist.size();}

public void print() { System.out.println(clist);}

public void sort() { Collections.sort(clist);}

public void iterate1()

{ Iterator <Circle> it = clist.iterator();

while (it.hasNext())

{ Circle el = it.next();

System.out.println(el.GetShape() + ". Площадь: " + el.GetSquare());

}

}

public void iterate2()

{ double t4, t5;

Scanner in = new Scanner(System.in);

System.out.println("Передвинуть на x:");

t4 = in.nextDouble();

System.out.println("Передвинуть на y:");

t5 = in.nextDouble();

for(Circle el : clist)

el.Move(t4, t5);

}

}

// JavaApplication5_1.java

package javaapplication5_1;

import shape.*;

import java.util.Scanner;

public class JavaApplication5_1

{ public static void main(String[] args)

{ int pr;

double t1, t2, t3;

int i = 0;

CircleList circles = new CircleList();

Circle Cr; //окружность

Scanner in = new Scanner(System.in);

do { i++;

System.out.println("Вв. координату центра окружности x:");

t1 = in.nextDouble();

System.out.println("Вв. координату центра окружности y:");

t2 = in.nextDouble();

System.out.println("Вв. радиус окружности:");

t3 = in.nextDouble();

Cr = new Circle("Окружность " + i, t1, t2, t3);

circles.add(Cr);

System.out.println("Продолжить ввод? 1 - Да, 0 - Нет");

pr = in.nextInt();

}while(pr == 1);

circles.sort();

circles.print();

circles.iterate1();

circles.iterate2();

}

}

Рисунок 5.2 – Результат выполнения программы

Задание 1

Изменить программу индивидуального варианта лаб. работы. №3 (задание 1): добавить класс контейнер, который должен создавать и работать с коллекцией объектов производного класса. Для реализации коллекции использовать интерфейс List и один из классов: ArrayList или LinkedList. Выполнить сортировку объектов коллекции по какому-либо полю объекта с использованием интерфейса Comparable. Для обхода коллекции объектов использовать итератор.

5.2 Пример создания коллекции объектов с использованием интерфейса Set и класса TreeSet

В листинге 5.2 представлена программа, которая рассчитывает координаты для перемещения на плоскости геометрической фигуры круг. Для круга также выполняется вычисление его площади. В программе описан абстрактный класс shape и на его основе производный класс Circle. Класс CircleSet используется для работы с коллекцией Set объектов класса Circle.

Программа выполнена в NetBeans IDE 7.3.1. На рис. 5.3. показан состав проекта программы. Рисунок 5.4 демонстрирует результат выполнения программы.

Листинг 5.2

// Shape.java

package shape;

// базовый класс фигура

public abstract class Shape

{ protected String type;

public Shape() { }

public Shape(String t) { type = t; }

public String GetShape() { return type; }

public abstract void Move(double x1, double y1);

}

// Circle.java

package shape;

// производный класс круг

public class Circle extends Shape

{ private double x, y, r;

public Circle(){ }

public Circle(String t, double x1, double y1, double r1)

{ super(t); x = x1; y = y1; r = r1; }

public String toString()

{ return "\n" + type + ". Координаты центра: x = " + x + ", y = " + y + ", r = " + r;

}

//переопределение метода Move

public void Move(double x1, double y1)

{ x += x1; y += y1;

String msg = "Новые координаты центра " + x + " " + y;

System.out.println(type + ". Результат перемещения: " + msg);

}

public double GetSquare()//вычисление площади

{ return Math.PI * Math.pow(r, 2); }

public double getx(){ return x;}

public double gety(){ return y;}

public double getr(){ return r;}

}

// SortByRadius.java

package shape;

import java.util.Comparator;

public class SortByRadius implements Comparator <Circle>

{ public int compare(Circle c1, Circle c2)

{ int res = 0;

if(c1.getr() < c2.getr()) { res = 1; }

if(c1.getr() > c2.getr()) { res = -1;}

return res;

}

}

// CircleSet.java

package shape;

import java.util.Scanner;

import java.util.Set;

import java.util.TreeSet;

import java.util.Iterator;

public class CircleSet

{ private Set<Circle> cset = new TreeSet<Circle>(new SortByRadius());

public void add( Circle obj) { cset.add(obj);}

public int count() { return cset.size();}

public void print() { System.out.println(cset);}

public void iterate1()

{ Iterator <Circle> it = cset.iterator();

while (it.hasNext())

{ Circle el = it.next();

System.out.println(el.GetShape() + ". Площадь: " + el.GetSquare());

}

}

public void iterate2()

{ double t4, t5;

Scanner in = new Scanner(System.in);

System.out.println("Передвинуть на x:");

t4 = in.nextDouble();

System.out.println("Передвинуть на y:");

t5 = in.nextDouble();

for(Circle el : cset)

el.Move(t4, t5);

}

}

// JavaApplication5.java

package javaapplication5;

import shape.*;

import java.util.Scanner;

public class JavaApplication5

{ public static void main(String[] args)

{ int pr;

double t1, t2, t3;

int i = 0;

CircleSet circles = new CircleSet();

Circle Cr; //окружность

Scanner in = new Scanner(System.in);

do { i++;

System.out.println("Вв. координату центра окружности x:");

t1 = in.nextDouble();

System.out.println("Вв. координату центра окружности y:");

t2 = in.nextDouble();

System.out.println("Вв. радиус окружности:");

t3 = in.nextDouble();

Cr = new Circle("Окружность " + i, t1, t2, t3);

circles.add(Cr);

System.out.println("Продолжить ввод? 1 - Да, 0 - Нет");

pr = in.nextInt();

}while(pr == 1);

circles.print();

circles.iterate1();

circles.iterate2();

}

}

Рисунок 5.3 – Состав проекта программы

Рисунок 5.4 – Результат выполнения программы

Задание 2

Изменить программу индивидуального варианта лаб. работы. №3 (задание 1): добавить класс контейнер, который должен создавать и работать с коллекцией объектов производного класса. Для реализации коллекции использовать интерфейс Set и класс TreeSet. Выполнить сортировку объектов коллекции по какому-либо полю объекта с использованием интерфейса Comparator. Для обхода коллекции объектов использовать итератор.

6

Соседние файлы в папке Метод. ук. к л. р