Форма входа

Наша реклама

Помогите сайту просмотрите рекламу

Поиск

Календарь

«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930

Наш опрос

Оцените мой сайт
Всего ответов: 122

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0




Суббота, 27.04.2024, 03:34
Приветствую Вас Гость | RSS
Скорая помощь для студентов
Главная | Регистрация | Вход
Лабораторная работа №2


Лабораторная работа №2
Основы работы с классами и объектами

Основные базовые блоки языка Java - классы. Схема синтаксиса описания класса такова:
[Модификаторы] class ИмяКласса [extends ИмяСуперкласса] [implements ИменаИнтерфейсов]
{
  Поля класса;
  Методы;
}
где:
Модификаторы - ключевые слова типа static, public и т.п., модифицирующие поведение класса по умолчанию;
ИмяКласса - имя, которое вы присваиваете классу;
ИмяСуперкласса - имя класса, от которого наследуется ваш класс;
ИменаИнтерфейсов - имена интерфейсов, которые реализуются данным классом.

Схема описания методов:
[Модификаторы] ВозвращаемыйТип ИмяМетода ([Список Параметров])
{
  [Тело Метода]
}

Для начальной инициализации класса используются специальные методы, называемые конструкторами. Имя конструктора совпадает с именем класса; конструкторы не имеют никакого возвращаемого значения (тип возвращаемого значения не указывается, даже в случае void). Класс может иметь несколько конструкторов, отличающихся набором параметров (например, конструктор без параметров для инициализации полей класса значениями по умолчанию и конструктор с параметрами - значениями для соответствующих полей класса).
Для инициализации объекта класса необходимо использовать оператор new в простейшей форме:
ИмяКласса ИмяПеременной = new ИмяКласса();
либо (раздельное объявление объектной переменной и ее инициализация)
ИмяКласса ИмяПеременной;
ИмяПеременной = new ИмяКласса();
где ИмяПеременной – имя объектной переменной. Если в операции new не указано параметров, то для инициализации класса будет использован конструктор по умолчанию, в противном случае будет вызван конструктор с соответствующим набором параметров.

Пример класса и его использования:

public class Example {

 // Поле класса
 private int integerField;

 //Конструктор по умолчанию
 public Example() {
  integerField = 0;
 }
 
 //Конструктор с параметром
 public Example(int integerValue) {
  setIntegerField(integerValue);
 }
 
 //Метод установки значения поля
 public void setIntegerField(int newValue) {
  integerField = newValue;
 }
 
 //Метод, возвращающий значение поля
 public int getIntegerField() {
  return integerField;
 }
}

public class ExampleDemo {
 public static void main(String[] args) {
  //Создание экземпляра класса Example
  Example exampleInstance = new Example();

  //Создание еще одного экземпляра класса Example
  Example anotherExampleInstance = new Example(1000);

  //Вывод на экран значения поля объекта exampleInstance
  System.out.println(exampleInstance.getIntegerValue());

  //Установка нового значения поля объекта exampleInstance
  exampleInstance.setIntegerValue(50);

  //Вывод на экран значения поля объекта exampleInstance
  System.out.println(exampleInstance.getIntegerValue());

  //Вывод на экран значения поля объекта exampleInstance
  System.out.println(anotherExampleInstance.getIntegerValue());
 }
}

Задание на лабораторную работу

1. Создайте класс «Шар». Класс должен иметь свойство «Размер» и конструктор для установки размера при создании. Изменять размер шара после создания нельзя.
2. Создайте класс «Контейнер». В контейнер должны помещаться шары. В контейнере не должно быть одинаковых шаров (т.е. необходимо осуществлять проверку при добавлении шара на наличие его в контейнере). Контейнер должен включать следующие методы:
a. Добавление шара
b. Удаление шара
c. Подсчет количества шаров в контейнере
d. Подсчет суммарного размера шаров в контейнере
e. Очистка контейнера
f. Поиск шара в контейнере (проверка наличия)
g. Вывод размеров всех шаров в контейнере
3. Создайте класс «Ящик», являющийся наследником класса «Контейнер» и отличающийся от него ограниченным размером. Размер ящика должен задаваться при его создании (в конструкторе). Изменять размер ящика после создания нельзя. Если при добавлении шара будет происходить превышение размера ящика, добавления происходить не должно. Класс должен содержать метод, возвращающий список шаров, отсортированный по размеру.
4. Создайте приложение, демонстрирующее работу класса «Ящик»

Примечания

1. Не забывайте, что каждый класс должен быть создан в отдельном файле.
2. Для хранения списка шаров в контейнере используйте реализацию стандартного класса-коллекции (например, java.util.LinkedList или java.util.ArrayList). Подробную информацию о классах-коллекциях и их использовании смотрите в документации, либо в Java Tutorial, раздел Collections. Также см. прилагаемый пример WordsList.java
3. Для последовательного обхода всех элементов коллекции в Java может использоваться особая форма цикла for (называемая также for-each):
for (ТипЭлемента элемент: Коллекция) {
  doSomething with элемент…
}
Пример использования см. в WordsList.java
4. При наследовании (директива extends при определении класса) класс-потомок наследует все поля и методы класса-родителя (за исключением объявленных как private), поэтому не требуется описывать те же действия в унаследованном классе. Если какой-либо метод в классе-потомке должен работать иначе, чем в родительском классе, его можно переопределить (создав метод с тем же именем и параметрами в классе-потомке); при использовании объекта класса-потомка будет вызван именно переопределенный метод.




Решение.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ball 

{
 //int ballSize;
 int Radius;
 
 Ball(int blSize)
 {
  if(blSize>0)Radius = blSize;
 }
 
 double PloshadBall()
 {
  return (3.14*Radius*Radius);
 }
 
 void setting() throws NumberFormatException, IOException
 {
  BufferedReader temp=new BufferedReader(new InputStreamReader(System.in));
  System.out.print("Введите размер шара: ");
  Radius = Integer.decode(temp.readLine());
 }
}


import java.util.*;

public class Box 

{
 int volNow=0;//их общий размер
 double Plosh;
 protected ArrayList<Ball> bl = new ArrayList<Ball>();
 protected ArrayList<Ball> blTest = new ArrayList<Ball>();
 
 //добавление
 boolean adding(Ball lb)
 {
  // if(searching(lb.Radius))
  // {
  // System.out.println("Уже есть.");
  // return false;
  // }
  // else
  // {
  bl.add(lb);
  return true;
  // }
 }
 
 //удаление
 void deleting(int sz)
 {
  if(searching(sz))
  {
  Ball q2 = null;
  for (Ball q: bl)
  {
  if(q.Radius==sz)
  {
  q2 = q;
  }
  }
  bl.remove(q2);
  }
 }
 //кол-во
 
 int calcNum()
 {
  return bl.size();
 }
 
 //суммарный размер
 int sumSize()
 {
  volNow=0;
  for (Ball q: bl)
  {
  volNow+=q.Radius;
  }
  return volNow;
 }
 
 //очистка
 void clearing()
 {
  for (int i=0; i<bl.size();)
  {
  bl.remove(i);
  System.out.println(" удалён");
  }
 }
 
 //поиск
 boolean searching(int sz)
 {
  for (Ball q: bl)
  {
  if(q.Radius==sz)
  {
  return true;
  }
  }
  return false;
 }
 
 //распечатка
 void printList()
 {
  if(bl.size()!=0)
  {
  for (Ball q: bl)
  {
  System.out.println("Шар: " + q.Radius);
  }
  }
  else System.out.println("Ящик пуст.");
 }
 double TestPloshad(Ball rad)
 {
  Plosh=0;
  blTest.add(rad);
  for (Ball q: blTest)
  {
  Plosh += q.PloshadBall();
  }
  blTest.clear();
  return Plosh;
 }
 
 double PloshadAllBalls()
 {
  Plosh=0;
  for (Ball q: bl)
  {
  Plosh = Plosh + q.PloshadBall();
  }
  return Plosh;
 }
 
}

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Class_Func
{
 public static void main (String args[])throws Exception
 {
  int k = -1;
  BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
  int Rad;
  int Dlina, Visota;
  double OstalosMesta;
  double PloshadBalls;
  /*while(bllSz<=0)
  {
  System.out.print("Укажите размер ящика: ");
  bllSz = Integer.decode(buf.readLine());
  if(bllSz<=0)System.out.println("Неверный размер!");
  }*/
  //Conteiner myContainer = new Conteiner(bllSz);
  System.out.print("Укажите длину и высоту ящика.");
  Dlina = Integer.decode(buf.readLine());
  Visota = Integer.decode(buf.readLine());
  
  Conteiner2 Conteiner = new Conteiner2(Dlina,Visota);
  while (k!=0)
  {
  System.out.println("Выберите действие (0 - выход): ");
  System.out.println("1 - Добавить шар.");
  System.out.println("2 - Осталось объема.");
  k = Integer.decode(buf.readLine());
  if (k == 1)
  {
   
  System.out.println("Укажите радиус добавляемого шара: ");
  Rad = Integer.decode(buf.readLine());
  Ball q = new Ball(Rad);
  OstalosMesta = Conteiner.FreePlace();
  PloshadBalls = Conteiner.TestPloshad(q);
  if (OstalosMesta > PloshadBalls)
  {
  System.out.println("Площадь добавленного шара: " + q.PloshadBall());
  Conteiner.adding(q);
  }
  else
  {
  System.out.println("В ящике нет места.");
  }
  }
  if (k==2)
  {
  System.out.println("Осталось объема: " + Conteiner.FreePlace());
  }
  }
  
  /*while (k!=0)
  {
  System.out.println("Выберите действие. 0 - выход.");
  System.out.println("1 - Добавить шар.");
  System.out.println("2 - Сортировка.");
  System.out.println("3 - Удалить шар.");
  System.out.println("4 - Информация о содержимом ящика.");
  System.out.println("5 - Общий размер шаров.");
  System.out.println("6 - Количество шаров.");
  System.out.println("7 - Очистить ящик.");
  k = Integer.decode(buf.readLine());
  if (k == 1)
  {
  System.out.println("Укажите размер шара: ");
  bllSz = Integer.decode(buf.readLine());
  if(myContainer.adding(new Ball(bllSz))) bllSz=-1;
  bllSz = myContainer.freePlace();
  }
  if (k==2)
  {
  System.out.println("Сортировка ящика: ");
  int[] sm = myContainer.sorted();
  for (int i=0; i<sm.length; i++)
  {
  System.out.println("Шар размером " + sm[i]);
  }
  }
  if (k==3)
  {
  System.out.println("Укажите размер удаляемого шара: ");
  bllSz = Integer.decode(buf.readLine());
  myContainer.deleting(bllSz);
  }
  if (k==4)
  {
  myContainer.printList();
  }
  if (k==5)
  {
  System.out.println("Общий размер шаров " + myContainer.sumSize());
  }
  if (k==6)
  {
  System.out.println("В ящике " + myContainer.calcNum() + " шаров.");
  }
  if (k==7)
  {
  myContainer.clearing();
  System.out.println("Ящик очищен.");
  }
  }*/
  
 }
}


public class Conteiner extends Box {
 private int boxSize=0;
 
 Conteiner(int bSize)
 {
  super();
  boxSize = bSize;
 }
 
 boolean adding(Ball lb)
 {
  if((sumSize()+lb.Radius)<=this.boxSize)
  {
  return super.adding(lb);
  }
  else
  {
  System.out.println("Не поместится. ");
  return false;
  }
 }
 
 int freePlace()
 {
 int bs = this.boxSize - sumSize();
 if(bs==0)System.out.println("Ящик полон.");
 return bs;
 }
 

 int[] sorted()
 {
  int mas[] = new int[bl.size()];
  if (bl.size()!=0)
  {
  int m = 0;
  for (Ball q: bl)
  {
  mas[m]=q.Radius; m++;
  }
  int buf = 0;
  for(int D=1;D<bl.size();D++)
  {
  for(int k=1;(D-k)>=0;k++)
  {
  if (mas[D-k]>mas[D-k+1])
  {
  buf=mas[D-k];
  mas[D-k]=mas[D-k+1];
  mas[D-k+1]=buf;
  }
  }
  }
  }
 return mas;
 }
}


public class Conteiner2 extends Box
{
 
 int Dlina, Visota;
 double Mesta;

 public Conteiner2 (int Dlin, int Vis)
 {
  Dlina = Dlin;
  Visota = Vis;
 }

 int Ploshad()
 {
  return (Dlina*Visota);
 }
 
 boolean adding(Ball lb)
 {
  return super.adding(lb);
 }

 double FreePlace()
 {
  Mesta = Ploshad() - PloshadAllBalls();
  if (Mesta > 0)
  {
  return Mesta; 
  }
  else
  {
  return 0;
  }
 }
}



Copyright MyCorp © 2024