• Апреля 01, 2020, 11:38:41 am
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: Вебинар по выбору IT профессии: http://bit.ly/2S4kcC6

Автор Тема: Java_OOP_Alexander_Scool_7_03_2017  (Прочитано 7221 раз)

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 13402
    • Просмотр профиля
    • E-mail
Java_OOP_Alexander_Scool_7_03_2017
« : Марта 07, 2017, 07:25:36 pm »
Wellcome

Ihor_Chupryna

  • Пользователи
  • *
  • Сообщений: 45
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #1 : Марта 10, 2017, 12:17:28 pm »
Добрый день!
1) Описать класс «Cat» (в качестве образца можно взять домашнего питомца).
Наделить его свойствами и методами. Создать несколько экземпляров объектов этого
класса. Использовать эти объекты.

package com.ua.chup.cat;

public class Cat {
private String name;
private String color;
private int age;
private double weight;
private double power;

public Cat(String name, String color, int age, double weight) {
super();
this.name = name;
this.color = color;
this.age = age;
this.weight = weight;
}

public Cat() {
super();
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public double getWeight() {
return weight;
}

public void setWeight(double weight) {
this.weight = weight;
}

public void mew() {
System.out.println("MEW-MEW!!!");
}

public double studyPower() {
if (weight <= 5) {
this.power = Math.round(age * weight);
} else if (weight >= 5) {
this.power = Math.round((age * weight) / (weight - 4));
} else if (age >= 10) {
this.power = Math.round((age * weight) / (age - 7));
}
return power;
}

@Override
public String toString() {
return "Cat [name=" + name + ", color=" + color + ", age=" + age + ", weight=" + weight + ", power=" + power
+ "]";
}

}
_____________________________________________________
package com.ua.chup.cat;

public class Room {

public static void main(String[] args) {
Cat cat1= new Cat();
cat1.setAge(12);
cat1.setColor("gray");
cat1.setName("Murzik");
cat1.setWeight(2.1d);
cat1.mew();
cat1.studyPower();
System.out.println(cat1);

Cat cat2 = new Cat("Tom","blue",8,5);
cat2.studyPower();
System.out.println(cat2);
}

}

Output:
MEW-MEW!!!
Cat [name=Murzik, color=gray, age=12, weight=2.1, power=25.0]
Cat [name=Tom, color=blue, age=8, weight=5.0, power=40.0]


Ihor_Chupryna

  • Пользователи
  • *
  • Сообщений: 45
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #2 : Марта 10, 2017, 12:19:56 pm »
2) Описать класс «Triangle». В качестве свойств возьмите длины сторон
треугольника. Реализуйте метод, который будет возвращать площадь этого
треугольника. Создайте несколько объектов этого класса и протестируйте их.

package com.ua.chup.triangle;

public class Triangle {
private double a;
private double b;
private double c;

public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public double getC() {
return c;
}
public void setC(double c) {
this.c = c;
}
public Triangle(int a, int b, int c) {
super();
this.a = a;
this.b = b;
this.c = c;
}
public double area(){
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
}
_________________________________________

package com.ua.chup.triangle;

public class Board {

public static void main(String[] args) {
Triangle triangle1= new Triangle(4, 5, 6);
System.out.println(triangle1.area());
}
}

[b]Output:[/b]
9.921567416492215


Ihor_Chupryna

  • Пользователи
  • *
  • Сообщений: 45
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #3 : Марта 10, 2017, 12:23:03 pm »
3) Описать класс «Vector3d» (т.е. он должен описывать вектор в 3-х мерной,
декартовой системе координат). В качестве свойств этого класса возьмите
координаты вектора. Для этого класса реализовать методы сложения, скалярного и
векторного произведения векторов. Создайте несколько объектов этого класса и
протестируйте их.

package com.ua.chup.vektor3d;

public class Vector3d {
private int x;
private int y;
private int z;

public Vector3d(int x, int y, int z) {
super();
this.x = x;
this.y = y;
this.z = z;
}

public Vector3d summ(Vector3d vector2) {
return new Vector3d(x + vector2.getX(), y + vector2.getY(), z + vector2.getZ());
}

public Vector3d vekror(Vector3d vector2) {

return new Vector3d(y * vector2.getZ() - z * vector2.getY(), z * vector2.getX() - x * vector2.getZ(),
x * vector2.getY() - y * vector2.getX());
}

public int scalar(Vector3d vector2) {

return x * vector2.getX() + y * vector2.getY() + z * vector2.getZ();
}

@Override
public String toString() {
return "Vector3d [x=" + x + ", y=" + y + ", z=" + z + "]";
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

public int getZ() {
return z;
}

public void setZ(int z) {
this.z = z;
}

}

_____________________________________

package com.ua.chup.vektor3d;

package com.ua.chup.vektor3d;

public class Main {

public static void main(String[] args) {
Vector3d vector3d1 = new Vector3d(-1,2,-2);
Vector3d vector3d2 = new Vector3d(2,1,-1);
System.out.println(vector3d1);
System.out.println(vector3d2);
System.out.println("Summ: "+vector3d1.summ(vector3d2));
System.out.println("Scalar: "+vector3d1.scalar(vector3d2));
System.out.println("Vektor_projection: "+vector3d1.vekror(vector3d2));
}

}


Output:
Vector3d [x=-1, y=2, z=-2]
Vector3d [x=2, y=1, z=-1]
Summ: Vector3d [x=1, y=3, z=-3]
Scalar: 2
Vektor_projection: Vector3d [x=0, y=-5, z=-5]


Ihor_Chupryna

  • Пользователи
  • *
  • Сообщений: 45
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #4 : Марта 10, 2017, 12:26:48 pm »
4) Опишите класс Phone (одним из свойств должен быть его номер). Также опишите
класс Network (сеть мобильного оператора). Телефон должен иметь метод
регистрации в сети мобильного оператора. Также у телефона должен быть метод call
(номер другого телефона), который переберет все телефоны, зарегистрированные в
сети. Если такой номер найден, то осуществить вызов, если нет - вывести сообщение
о неправильности набранного номера.

package com.ua.chup.phone;

public class Phone {
private String number;
private String model;
private String color;
private int weight;

public Phone(String number, String model, String color, int weight) {
super();
this.number = number;
this.model = model;
this.color = color;
this.weight = weight;
}

public void call(Phone phone) {
boolean check = false;
for (String n : Network.numbers) {
if (n.equals(phone.number))
check = true;
}
if (check) {
System.out.println("Connection is successfull...");
} else {
System.out.println(phone.number + " is not register in " + Network.name);
}

}

public void registrOnNetwork() {
Network.numbers.add(number);
}

@Override
public String toString() {
return "Phone [number=" + number + ", model=" + model + ", color=" + color + ", weight=" + weight + "]";
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getModel() {
return model;
}

public void setModel(String model) {
this.model = model;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public int getWeight() {
return weight;
}

public void setWeight(int weight) {
this.weight = weight;
}

}
__________________________________________

package com.ua.chup.phone;

import java.util.HashSet;
import java.util.Set;

public class Network {
static final String name = "LIFEcell";
static Set<String> numbers = new HashSet<>();
}
_______________________________
package com.ua.chup.phone;

public class Main {

public static void main(String[] args) {
Phone ph1 = new Phone("0501234567","samsung S5","black",200);
Phone ph2 = new Phone("0501111111","nokia S7","white",100);
Phone ph3 = new Phone("0502222222","sony S1","green",300);
ph1.registrOnNetwork();
ph2.registrOnNetwork();
System.out.println(ph1);
System.out.println(ph2);
System.out.println(ph3);
ph1.call(ph2);
ph1.call(ph2);
ph2.call(ph1);
ph1.call(ph3);
}

}
Output:
Phone [number=0501234567, model=samsung S5, color=black, weight=200]
Phone [number=0501111111, model=nokia S7, color=white, weight=100]
Phone [number=0502222222, model=sony S1, color=green, weight=300]
Connection is successfull...
Connection is successfull...
Connection is successfull...
0502222222 is not register in LIFEcell

EfimenkoAV

  • Пользователи
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #5 : Марта 10, 2017, 12:48:29 pm »
Triangle

package eav.lesson.one_2;

public class Main {

public static void main(String[] args) {

Triangle  triangle1 = new Triangle(3, 4, 5);
        System.out.println("Площадь треугольника: " + triangle1.area());
        System.out.println(triangle1.toString());
       
Triangle  triangle2 = new Triangle(3.7, 4.2, 5.8);
        System.out.println("Площадь треугольника: " + triangle2.area());
        System.out.println(triangle2.toString());
       
        Triangle  triangle3 = new Triangle();
        triangle3.setA(4);
        triangle3.setB(6);
        triangle3.setC(7);
       
        System.out.println("Длина стороны B: " + triangle3.getB());
        System.out.println("Площадь треугольника: " + triangle3.area());
        System.out.println(triangle3.toString());
       
}

}
package eav.lesson.one_2;

public class Triangle {
private double a;
private double b;
private double c;

public Triangle(Double a, Double b, Double c) {
super();
this.a = a;
this.b = b;
this.c = c;
}

public Triangle(int a, int b, int c) {
super();
this.a = a;
this.b = b;
this.c = c;
}

public Triangle() {
super();
}


public double getA() {
return a;
}

public void setA(double a) {
this.a = a;
}

public double getB() {
return b;
}

public void setB(double b) {
this.b = b;
}

public double getC() {
return c;
}

public void setC(double c) {
this.c = c;
}

double area(){
double p;
p =(this.a + this.b + this.c)/2;
return Math.sqrt((p*(p - this.a)*(p - this.b)*(p - this.c)));
}

@Override
public String toString() {
return "Triangle [a=" + a + ", b=" + b + ", c=" + c + "]";
}


}

[b]Результат:[/b]

Площадь треугольника: 6.0
Triangle [a=3.0, b=4.0, c=5.0]
Площадь треугольника: 7.748509130794127
Triangle [a=3.7, b=4.2, c=5.8]
Длина стороны B: 6.0
Площадь треугольника: 11.976539567003485
Triangle [a=4.0, b=6.0, c=7.0]

anderwerty

  • Mentors
  • Пользователи
  • *
  • Сообщений: 288
  • Андрей
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #6 : Марта 10, 2017, 01:52:53 pm »
Ihor_Chupryna

1) Описать класс «Cat» (в качестве образца можно взять домашнего питомца).
Наделить его свойствами и методами. Создать несколько экземпляров объектов этого
класса. Использовать эти объекты.

Хорошо.

2) Описать класс «Triangle». В качестве свойств возьмите длины сторон
треугольника. Реализуйте метод, который будет возвращать площадь этого
треугольника. Создайте несколько объектов этого класса и протестируйте их.

Добавить нужно проверку корректности данных.
Создайте объект
Triangle triangle1= new Triangle(40, 5, 6)
и посмотрите, что получится.


3) Описать класс «Vector3d» (т.е. он должен описывать вектор в 3-х мерной,
декартовой системе координат). В качестве свойств этого класса возьмите
координаты вектора. Для этого класса реализовать методы сложения, скалярного и
векторного произведения векторов. Создайте несколько объектов этого класса и
протестируйте их.

В целом не плохо.
Мелкое замечание.
Если не обусловлено в задании, то координаты могут быть не только целыми числами.

4) Опишите класс Phone (одним из свойств должен быть его номер). Также опишите
класс Network (сеть мобильного оператора). Телефон должен иметь метод
регистрации в сети мобильного оператора. Также у телефона должен быть метод call
(номер другого телефона), который переберет все телефоны, зарегистрированные в
сети. Если такой номер найден, то осуществить вызов, если нет - вывести сообщение
о неправильности набранного номера.

На мой взгляд путаница с сущностями Телефон и Сеть.

anderwerty

  • Mentors
  • Пользователи
  • *
  • Сообщений: 288
  • Андрей
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #7 : Марта 10, 2017, 02:04:48 pm »
EfimenkoAV

1.Поля в классе  типа double, а инициализация в конструкторе числами типа int.
Логическая ошибка.

        private double a;
private double b;
private double c;

        public Triangle(Double a, Double b, Double c) {
super();
this.a = a;
this.b = b;
this.c = c;
}

public Triangle(int a, int b, int c) {
super();
this.a = a;
this.b = b;
this.c = c;
}


Да вы перегружаете конструктор. Но методы все ориентированы на тип double.
Большого смысла в этом нету.

  public Triangle(Double a, Double b, Double c)
Зачем вы используете класс обвертку Double? Для этого нужна причина.
Такой элемент более "тяжеловесный" нежели обычный примитив.
И попусту не следует его использовать без причины.
Рассмотрим, что происходит
Triangle  triangle2 = new Triangle(3.7, 4.2, 5.8);
Происходит следующее
1) автоупаковка, 
3.7, 4.2, 5.8 "превращаються" в объекты Double a, Double b, Double c
2) потом же отрабатывает конструктор

                this.a = a;
      this.b = b;
      this.c = c;
И здесь происходит автораспаковка.

2. Нужна проверка на валидность данных.
Проверить, что длина стороны не отрицательная. И вообще такой треугольники существует.
 

Ihor_Chupryna

  • Пользователи
  • *
  • Сообщений: 45
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #8 : Марта 10, 2017, 02:48:37 pm »
2) Описать класс «Triangle». В качестве свойств возьмите длины сторон
треугольника. Реализуйте метод, который будет возвращать площадь этого
треугольника. Создайте несколько объектов этого класса и протестируйте их.

Добавить нужно проверку корректности данных.
Создайте объект
Triangle triangle1= new Triangle(40, 5, 6)
и посмотрите, что получится.

чуть изменил:

.....................
public boolean isTrueTriangle(){
if(a<(b+c) &&  a>(b-c) &&  b<(a+c) && b>(a-c) &&  c<(a+b) && c>(a-b))
return true;
else
return false;
}
public double area(){
if(isTrueTriangle()){
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}else{
System.out.print("Data's error!!! ");
return -1;
}

}
.....................

Skiner

  • Пользователи
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #9 : Марта 10, 2017, 03:01:15 pm »
Описать класс «Cat» (в качестве образца можно взять домашнего питомца).
Наделить его свойствами и методами. Создать несколько экземпляров объектов этого
класса. Использовать эти объекты.
https://gist.github.com/anonymous/e33b0c2fcae1e336784b16cd9eed7cce

EfimenkoAV

  • Пользователи
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #10 : Марта 10, 2017, 05:25:27 pm »
Cat

package eav.lesson.one;

public class Main  {

public static void main(String[] args) {

Cat cat1 = new Cat();
cat1.setName("Беланчик");
cat1.setBreed("Турецкая ангора");
cat1.setColor("Белый");
cat1.setGender("кот");
cat1.setKind_of_wool("длиношерстная");
cat1.setYear(2015);
System.out.println(cat1);

Cat cat2 = new Cat("Уголек","Бурманская", "Черный", "кошка", "короткошерстная", 2016);

System.out.println(cat2);

cat1.dietCat(7, 200.57);
cat2.dietCat(7, -300.43);
}

}

package eav.lesson.one;

public class Cat {
private String name;          //кличка
private String breed;         //порода
private String color;         //окрас
private String gender;        //пол
private String Kind_of_wool;  //вид шерсти
private int year;

public Cat(String name, String breed, String color, String gender, String kind_of_wool, int year) {
super();
this.name = name;
this.breed = breed;
this.color = color;
this.gender = gender;
Kind_of_wool = kind_of_wool;
this.year = year;
}

public Cat() {
super();
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getBreed() {
return breed;
}

public void setBreed(String breed) {
this.breed = breed;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public String getKind_of_wool() {
return Kind_of_wool;
}

public void setKind_of_wool(String kind_of_wool) {
Kind_of_wool = kind_of_wool;
}

public int getYear() {
return year;
}

public void setYear(int year) {
this.year = year;
}

@Override
public String toString() {
return "Cat [Кличка=" + name + ", Порода=" + breed + ", Окрас=" + color + ", Пол=" + gender + ", Вид шерсти=" + Kind_of_wool + ", Год рождения=" + year + "]";
}

public void dietCat(int Days, double diet) {
if(Days > 0 && diet > 0) {
System.out.println(this.getName()+": на " + Days + " дней, необходимо "+
                        (Days*diet) + " грамов корма");
} else {
System.out.println("Ошибка в параметрах!");

}
}


}

Результат

Cat [Кличка=Беланчик, Порода=Турецкая ангора, Окрас=Белый, Пол=кот, Вид шерсти=длиношерстная, Год рождения=2015]
Cat [Кличка=Уголек, Порода=Бурманская, Окрас=Черный, Пол=кошка, Вид шерсти=короткошерстная, Год рождения=2016]
Беланчик: на 7 дней, необходимо 1403.99 грамов корма
Ошибка в параметрах!

Skiner

  • Пользователи
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #11 : Марта 10, 2017, 06:49:18 pm »
Описать класс «Triangle». В качестве свойств возьмите длины сторон
треугольника. Реализуйте метод, который будет возвращать площадь этого
треугольника. Создайте несколько объектов этого класса и протестируйте их.
https://gist.github.com/anonymous/a4d7b4738b861da8c24585daf766d896

Skiner

  • Пользователи
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #12 : Марта 10, 2017, 06:49:56 pm »
 Опишите класс Phone (одним из свойств должен быть его номер). Также опишите
класс Network (сеть мобильного оператора). Телефон должен иметь метод
регистрации в сети мобильного оператора. Также у телефона должен быть метод call
(номер другого телефона), который переберет все телефоны, зарегистрированные в
сети. Если такой номер найден, то осуществить вызов, если нет - вывести сообщение
о неправильности набранного номера.
https://gist.github.com/anonymous/d532224da3d4b00f2ef01a18e922680f

Yurka

  • Пользователи
  • *
  • Сообщений: 18
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #13 : Марта 10, 2017, 06:59:13 pm »
ДЗ второго урока.
https://github.com/yuomelyanchuk/HomeWorkOOP2

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 13402
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Scool_7_03_2017
« Ответ #14 : Марта 10, 2017, 09:48:11 pm »
Ihor_Chupryna
2. Не нарушайте порядок описания членов класса (сначала конструктор потом все остальное).
Почему все свойства double (это правильно), а вот конструктор принимает параметры типа int.

3. Открытые свойства класса в Java не используют (Set в Network). По условие вы должны вызвать метод входящий звонок у телефона на который вы звоните, а у вас даже метода такого то нет.

EfimenkoAV
Почему все свойства double (это правильно), а вот конструктор принимает параметры типа int.
Да и зачем классы обертками пользоваться? Они ж тут совсем не нужны - это я про Double в конструкторе
1. Кот - в Java имена переменных пишуться с маленькой буквы - int Days - такой код не приветствуется.



Skiner
Отсутствие конструктора по умолчанию - плохой стиль при программировании на Java
Отсутствие toString() - также не очень хорошо
2. Никакой реализации логики в конструкторе - вынесите в private final метод эту логику а в конструкторе его вызывайте.
В остальном ОК


Yurka
Отсутствие конструктора по умолчанию не очень приветствуется.
Логика в конструкторе также совсем не приветствуется.
Использование суперкласса исключений также не принятая практика.
В остальном ОК.