• Октября 23, 2020, 02:35:39 pm
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: Вебинар по выбору IT профессии: http://bit.ly/2S4kcC6

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

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #30 : Января 24, 2020, 01:36:46 am »
Александр, спасибо за замечания. Методы в классе Группа подправила и добавила возможность интерактивного добавления студентов в группу (без учета того, что имена и фамилии могут содержать цифры и прочие символы). 

package com.gmail.iaroslavakorenovska;

public class NegativeValueException extends Exception {

@Override
public String toString() {
// TODO Auto-generated method stub
return "This value must be positive!";
}

}

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;
import javax.swing.JOptionPane;

public class Group implements Voenkom {

// Fields
private Student[] group = new Student[10];

//Constructors
public Group(Student[] group) {
super();
this.group = group;
}

public Group() {
super();
}

// Getters&Setters
public Student[] getGroup() {
return group;
}

public void setGroup(Student[] group) {
this.group = group;
}

// Methods
public void interactiveAddStudent() {
Student student = new Student();
if (JOptionPane.showConfirmDialog(null, "Would you like to add a new student?", "Group",
JOptionPane.YES_NO_OPTION) == 0) {
student.setName((String) JOptionPane.showInputDialog("Input student's name"));
student.setSurname((String) JOptionPane.showInputDialog("Input student's surname"));
for (;;) {
try {
int n = Integer.parseInt(JOptionPane.showInputDialog("Input number of student's group"));
if (n > 0) {
student.setNumberOfGroup(n);
break;
} else {
throw new NegativeValueException();
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Error number format");
} catch (NegativeValueException e) {
JOptionPane.showMessageDialog(null, "Negative value ");
}
}

for (;;) {
try {
int n = Integer.parseInt(JOptionPane.showInputDialog("Input student's age"));
if (n > 0) {
student.setAge(n);
break;
} else {
throw new NegativeValueException();
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Error number format");
} catch (NegativeValueException e) {
JOptionPane.showMessageDialog(null, "Negative value ");
}
}

for (;;) {
try {
int n = Integer.parseInt(JOptionPane.showInputDialog("Input number of student's record-book"));
if (n > 0) {
student.setNumberOfRecordBook(n);
break;
} else {
throw new NegativeValueException();
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Error number format");
} catch (NegativeValueException e) {
JOptionPane.showMessageDialog(null, "Negative value ");
}
}

if (JOptionPane.showConfirmDialog(null, "Is this student a man?", "Student",
JOptionPane.YES_NO_OPTION) == 0) {
student.setSex(true);
}
this.addStudentInGroup(student);
}
}

public int searchStudentInGroup(Student student) {
int numberInGroup = -1;
for (int i = 0; i < 10; i++) {
try {
if (group[i].getNumberOfRecordBook() == student.getNumberOfRecordBook()) {
numberInGroup = i;
break;
}
} catch (NullPointerException e) {
numberInGroup = -1;
continue;
}
}
return numberInGroup;
}

public void addStudentInGroup(Student student) {
try {
if (this.searchStudentInGroup(student) < 0) {
int j = -1;
for (int i = 0; i < 10; i++) {
if (group[i] == null) {
j = i;
group[i] = student;
break;
}
}
if (j < 0) {
throw new MyException();
}
} else {
System.out.println("You can't add this student because he studies in your group");
}
} catch (MyException e) {
System.out.println(e.toString());
}
}

public void deleteStudentFromGroup(Student student) {
for (int i = 0; i < group.length; i++) {
try {
if (group[i].getNumberOfRecordBook() == student.getNumberOfRecordBook()) {
group[i] = null;
break;
}}
catch(NullPointerException e) {
continue;
}
}
}

public Student searchStudentInGroupBySurname(String surname) {
Student student = new Student();
for (int i = 0; i < group.length; i++) {
try {
if (group[i].getSurname().equalsIgnoreCase(surname)) {
student = group[i];
break;
}
}
catch(NullPointerException e) {
continue;
}
}
return student;
}

// Если есть однофамильцы
public Student[] searchStudentsInGroupBySurname(String surname) {
Student[] studentsSameSurname = new Student[10];
for (int i = 0; i < group.length; i++) {
try {
if (group[i].getSurname().equalsIgnoreCase(surname)) {
studentsSameSurname[i] = group[i];
continue;
}
}
catch(NullPointerException e) {
continue;
}
}
return studentsSameSurname;
}

@Override
public String toString() {
return "Group [group=" + Arrays.toString(group) + "]";
}

@Override
public Student[] recrut() {
Group recrutGroup = new Group();
for (int i = 0; i < this.getGroup().length; i++) {
try {
if ((this.getGroup()[i].getAge() > 18) && (this.getGroup()[i].isSex() == true)) {
recrutGroup.addStudentInGroup(this.getGroup()[i]);
}
} catch (NullPointerException e) {
continue;
}
}
return recrutGroup.getGroup();
}

}

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub

// Create new group
Group group = new Group();

for (int i = 0; i < 3; i++) {
group.interactiveAddStudent();
}

System.out.println(group.toString());

Student student1 = new Student("name", "surname", 17, true, 1, 101);
group.addStudentInGroup(student1);
System.out.println(group.toString());
Student student2 = new Student("name2", "surname2", 17, true, 1, 202);
group.deleteStudentFromGroup(student2);
System.out.println(group.toString());

}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #31 : Января 24, 2020, 02:11:13 pm »
Artem Khmelov
Переменные ссылочного типа не сравнивают оператором == (он работает некоректно) . Так что в методе удаления студента такой код некоректен
if (group[i] == student) {
В остальном решение верное


Random
Решение верное

Artem Khmelov

  • Пользователи
  • *
  • Сообщений: 4
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #32 : Января 24, 2020, 10:07:32 pm »
Artem Khmelov
Переменные ссылочного типа не сравнивают оператором == (он работает некоректно) . Так что в методе удаления студента такой код некоректен
if (group[i] == student) {

Alexander Ts
Я правильно понимаю, что оператор == некоректно работает с переменными ссылочного типа так как он сравнивает не значение переменных, а место в памяти куда они ссылаются?
И правильно ли я понимаю, что мой метод  удаления студента работает, но написан не корректно с точки зрения программирования? Или подскажите условия при которых код не работает, чтобы я разобрался.
Спасибо.

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #33 : Января 24, 2020, 11:59:37 pm »
Сортировка группы по параметру с помощью лямбда-функций и интерфейса CheckNull из видео к доп.материалам (в класс Группа добавлен метод сортировки sortGroupByParameter)

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class Group {

// Fields
private Student[] group = new Student[10];

//Constructors
public Group(Student[] group) {
super();
this.group = group;
}

public Group() {
super();
}

// Getters&Setters
public Student[] getGroup() {
return group;
}

public void setGroup(Student[] group) {
this.group = group;
}

// Methods

public void sortGroupByParameter(String string) {
if (string.equalsIgnoreCase("1")) {
Arrays.sort(this.getGroup(),
(a, b) -> CheckNull.checkNull(a, b) != CheckNull.NOT_NULL ? CheckNull.checkNull(a, b)
: a.getName().compareToIgnoreCase(b.getName()));
}
if (string.equalsIgnoreCase("2")) {
Arrays.sort(this.getGroup(),
(a, b) -> CheckNull.checkNull(a, b) != CheckNull.NOT_NULL ? CheckNull.checkNull(a, b)
: a.getSurname().compareToIgnoreCase(b.getSurname()));
}
if (string.equalsIgnoreCase("3")) {
Arrays.sort(this.getGroup(),
(a, b) -> CheckNull.checkNull(a, b) != CheckNull.NOT_NULL ? CheckNull.checkNull(a, b)
: a.getAge() - b.getAge());
}
if (string.equalsIgnoreCase("4")) {
Arrays.sort(this.getGroup(),
(a, b) -> CheckNull.checkNull(a, b) != CheckNull.NOT_NULL ? CheckNull.checkNull(a, b)
: a.getNumberOfGroup() - b.getNumberOfGroup());
}
if (string.equalsIgnoreCase("5")) {
Arrays.sort(this.getGroup(),
(a, b) -> CheckNull.checkNull(a, b) != CheckNull.NOT_NULL ? CheckNull.checkNull(a, b)
: a.getNumberOfRecordBook() - b.getNumberOfRecordBook());
} else {
System.out.println("There isn't such parameter");
}

}

public int searchStudentInGroup(Student student) {
int numberInGroup = -1;
for (int i = 0; i < 10; i++) {
try {
if (group[i].getNumberOfRecordBook() == student.getNumberOfRecordBook()) {
numberInGroup = i;
break;
}
} catch (NullPointerException e) {
numberInGroup = -1;
continue;
}
}
return numberInGroup;
}

public void addStudentInGroup(Student student) {
try {
if (this.searchStudentInGroup(student) < 0) {
int j = -1;
for (int i = 0; i < 10; i++) {
if (group[i] == null) {
j = i;
group[i] = student;
break;
}
}
if (j < 0) {
throw new MyException();
}
} else {
System.out.println("You can't add this student because he studies in your group");
}
} catch (MyException e) {
System.out.println(e.toString());
}
}

public void deleteStudentFromGroup(Student student) {
for (int i = 0; i < group.length; i++) {
try {
if (group[i].getNumberOfRecordBook() == student.getNumberOfRecordBook()) {
group[i] = null;
break;
}
} catch (NullPointerException e) {
continue;
}
}
}

public Student searchStudentInGroupBySurname(String surname) {
Student student = new Student();
for (int i = 0; i < group.length; i++) {
try {
if (group[i].getSurname().equalsIgnoreCase(surname)) {
student = group[i];
break;
}
} catch (NullPointerException e) {
continue;
}
}
return student;
}

// Если есть однофамильцы
public Student[] searchStudentsInGroupBySurname(String surname) {
Student[] studentsSameSurname = new Student[10];
for (int i = 0; i < group.length; i++) {
try {
if (group[i].getSurname().equalsIgnoreCase(surname)) {
studentsSameSurname[i] = group[i];
continue;
}
} catch (NullPointerException e) {
continue;
}
}
return studentsSameSurname;
}

@Override
public String toString() {
return "Group [group=" + Arrays.toString(group) + "]";
}

}

package com.gmail.iaroslavakorenovska;

public interface CheckNull {
public int NOT_NULL = 2;

public static int checkNull(Object a, Object b) {
if (a != null && b == null) {
return 1;
}

if (a == null && b != null) {
return -1;
}
if (a == null && b == null) {
return 0;
}
return NOT_NULL;
}
}

package com.gmail.iaroslavakorenovska;

public class Student extends Human {

// Fields
private int numberOfGroup;
private int numberOfRecordBook;

// Constructors
public Student(String name, String surname, int age, boolean sex, int numberOfGroup, int numberOfRecordBook) {
super(name, surname, age, sex);
this.numberOfGroup = numberOfGroup;
this.numberOfRecordBook = numberOfRecordBook;
}

public Student(String name, String surname, int age, boolean sex) {
super(name, surname, age, sex);
}

public Student() {
super();
}

// Getters&Setters
public int getNumberOfGroup() {
return numberOfGroup;
}

public void setNumberOfGroup(int numberOfGroup) {
this.numberOfGroup = numberOfGroup;
}

public int getNumberOfRecordBook() {
return numberOfRecordBook;
}

public void setNumberOfRecordBook(int numberOfRecordBook) {
this.numberOfRecordBook = numberOfRecordBook;
}

// Methods
@Override
public void info() {
System.out.println("Student: [name=" + super.getName() + ", surname= " + super.getSurname() + ", age= "
+ super.getAge() + ", sex= " + super.isSex() + ", numberOfGroup=" + numberOfGroup
+ ", numberOfRecordBook=" + numberOfRecordBook + "]");
}

@Override
public String toString() {
return "Student: "+ super.toString()+ "[numberOfGroup=" + numberOfGroup + ", numberOfRecordBook=" + numberOfRecordBook + "]";
}
}

package com.gmail.iaroslavakorenovska;

public class Human {


//Fields
private String name;
private String surname;
private int age;
private boolean sex;

//Constructors
public Human(String name, String surname, int age, boolean sex) {
super();
this.name = name;
this.surname = surname;
this.age = age;
this.sex = sex;
}

public Human() {
super();
}

//Getters&Setters

public String getName() {
return name;
}

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

public String getSurname() {
return surname;
}

public void setSurname(String surname) {
this.surname = surname;
}

public int getAge() {
return age;
}

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

public boolean isSex() {
return sex;
}

public void setSex(boolean sex) {
this.sex = sex;
}

//Methods

public void info() {
System.out.println("Human: [name=" + name + ", surname= " + surname + ", age= " + age + ", sex= " + sex + "]");
}

@Override
public String toString() {
return "Human [name=" + name + ", surname=" + surname + ", age=" + age + ", sex=" + sex + "]";
}

}

package com.gmail.iaroslavakorenovska;

public class MyException extends Exception{

@Override
public String toString() {
return "Too many students in your group";
}

}

package com.gmail.iaroslavakorenovska;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// Create new group
Group group = new Group();

group.addStudentInGroup(new Student("Vasya", "Petrov", 15, true, 22, 345));
group.addStudentInGroup(new Student("Petya", "Petrov", 16, true, 2, 34));
group.addStudentInGroup(new Student("Inga", "Petrova", 15, false, 23, 3145));
group.addStudentInGroup(new Student("Vlada", "Vasileva", 17, false, 17, 765));
System.out.println(group.toString());

Scanner sc = new Scanner(System.in);
System.out.println("Input integer parameter");
group.sortGroupByParameter(sc.nextLine());
sc.close();
System.out.println(group.toString());

}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #35 : Января 29, 2020, 07:33:27 pm »
Задача 1. Создайте сто потоков, которые будут вычислять факториал числа, равного номеру этого потока, и выводить результат на экран.

package com.gmail.iaroslavakorenovska;

import java.math.BigInteger;

public class FactorialOfThreadsNumber implements Runnable {

private int numberOfThread;

public FactorialOfThreadsNumber() {
super();
}

public FactorialOfThreadsNumber(int numberOfThread) {
super();
this.numberOfThread = numberOfThread;
}

public int getNumberOfThread() {
return numberOfThread;
}

public void setNumberOfThread(int numberOfThread) {
this.numberOfThread = numberOfThread;
}

public BigInteger calculateFactorial(int numberOfThread) {
BigInteger fact = new BigInteger("1");
for (int i = 1; i <= numberOfThread; i++) {
fact = fact.multiply(new BigInteger("" + i));
}
return fact;
}

@Override
public void run() {
System.out.println("Thread " + numberOfThread + " : " + calculateFactorial(numberOfThread));

}

@Override
public String toString() {
return "FactorialOfThreadsNumber [numberOfThread=" + numberOfThread + "]";
}

}

package com.gmail.iaroslavakorenovska;

public class Main {

public static void main(String[] args) {
Thread[] threads = new Thread[100];
for (int i = 0; i < 100; i++) {
threads[i] = new Thread(new FactorialOfThreadsNumber(i + 1));
threads[i].start();
}

}

}

Задача 2.  Написать код для многопоточного подсчета суммы элементов массива целых чисел. Сравнить скорость подсчета с простым алгоритмом.

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class SumOfArraysElements implements Runnable {

private double[] array;
private double sumOfPart;

public SumOfArraysElements() {
super();
}

public SumOfArraysElements(double[] array) {
super();
this.array = array;
}

public double[] getArray() {
return array;
}

public void setArray(double[] array) {
this.array = array;
}

public double getSumOfPart() {
return sumOfPart;
}

public void setSumOfPart(double sumOfPart) {
this.sumOfPart = sumOfPart;
}

public double sumOfPartArray(double[] array) {
double sum = 0;
for (double d : array) {
sum += d;
}
return sum;
}

@Override
public void run() {
sumOfPart=sumOfPartArray(array);
}

@Override
public String toString() {
return "SumOfArraysElements [array=" + Arrays.toString(array) + "]";
}
}

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

// Create new Array
double[] a = new double[100000];
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 1000) / 10;
}
System.out.println("Array: " + Arrays.toString(a));

// Create 2 Threads
long  start=System.currentTimeMillis();
double[] part1 = Arrays.copyOfRange(a, 0, a.length / 2);
double[] part2 = Arrays.copyOfRange(a, a.length / 2, a.length);

// Sum by 2 threads
SumOfArraysElements[] parts = { new SumOfArraysElements(part1), new SumOfArraysElements(part2) };
Thread thr1 = new Thread(parts[0]);
Thread thr2 = new Thread(parts[1]);
thr1.start();
thr2.start();

try {
thr1.join();
thr2.join();
} catch (InterruptedException e) {

}

System.out.println("Sum by threads = " + (parts[0].getSumOfPart() + parts[1].getSumOfPart()));
long finish=System.currentTimeMillis();
System.out.println((finish-start)+" ms");

// Sum by one thread
double sum = 0;
start=System.currentTimeMillis();
for (double d : a) {
sum += d;
}
System.out.println("Easy sum = " + sum);
finish=System.currentTimeMillis();
System.out.println((finish-start)+" ms");
}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #36 : Января 30, 2020, 11:49:28 am »
Random
Решение верное

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #37 : Января 31, 2020, 08:25:57 pm »
Задача: Напишите многопоточный вариант сортировки массива методом Шелла
package com.gmail.iaroslavakorenovska;

public class ShellSortThreads implements Runnable{
private double[] arr;

public ShellSortThreads(double[] arr) {
super();
this.arr = arr;
}

private void insertionSort(double[] arr, int start, int inc) {
double tmp;
for (int i = start; i < arr.length - 1; i += inc) {
for (int j = Math.min(i + inc, arr.length - 1); j - inc >= 0; j = j - inc) {
if (arr[j - inc] > arr[j]) {
tmp = arr[j];
arr[j] = arr[j - inc];
arr[j - inc] = tmp;
} else
break;
}
}
}

@Override
public void run() {
for (int inc = arr.length / 2; inc >= 1; inc = inc / 2) {
for (int step = 0; step < inc; step++) {
insertionSort(arr, step, inc);
}
}
}
}



package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class Main {

public static void main(String[] args) {
// Create new Array
double[] a = new double[10];
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 1000) / 10;
}
System.out.println("Array: " + Arrays.toString(a));

// Create Array's Copy
double[] b = Arrays.copyOfRange(a, 0, a.length);

// Shell Sort By One Thread
long start = System.currentTimeMillis();
Thread thr = new Thread(new ShellSortThreads(a));
thr.start();
try {
thr.join();
} catch (InterruptedException e) {
System.out.println(e);
}
long stop = System.currentTimeMillis();
System.out.println("Time : " + (stop - start));
System.out.println("Sorted Array By One Thread: " + Arrays.toString(a));

// Shell Sort By Threads
// Sort 2 parts of Array by 2 Threads
start = System.currentTimeMillis();
double[] part1 = Arrays.copyOfRange(b, 0, b.length / 2);
double[] part2 = Arrays.copyOfRange(b, b.length / 2, b.length);
Thread thr1 = new Thread(new ShellSortThreads(part1));
Thread thr2 = new Thread(new ShellSortThreads(part2));
thr1.start();
thr2.start();
try {
thr1.join();
thr2.join();
} catch (InterruptedException e) {
System.out.println(e);
}
// Create Array With sorted first and second parts
if (b.length % 2 == 0) {
for (int i = 0; i < b.length / 2; i++) {
b[i] = part1[i];
b[b.length - 1 - i] = part2[part2.length - 1 - i];
}
} else {
b[b.length / 2] = part2[0];
for (int i = 0; i < b.length / 2; i++) {
b[i] = part1[i];
b[b.length - 1 - i] = part2[part2.length - 1 - i];
}
}
// Sort new array with sorted parts
Thread t = new Thread(new ShellSortThreads(b));
t.start();
try {
t.join();
} catch (InterruptedException e) {
System.out.println(e.toString());
}
stop = System.currentTimeMillis();
System.out.println("Time : " + (stop - start));
System.out.println("Sorted Array By Threads: " + Arrays.toString(b));

}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #38 : Февраля 01, 2020, 10:45:07 pm »
Random

Решение верное

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #39 : Февраля 04, 2020, 12:46:22 am »
Задача.
Создайте класс-контейнер типа стек (класс в который можно добавлять и удалять объекты других классов, только в вершину стека), в который можно сохранять объекты произвольного типа. Должен быть метод добавления элемента в стек, получение с удалением элемента из стека, и просто получение элемента из вершины из стека.  Должна быть реализована работа с «черным списком» классов (смотри ниже). Если объект который добавляется в стек принадлежит классу из «черного списка», то добавление такого объекта запрещено.
Для описанного выше стека создайте класс «Черный список», в котором будут описаны   классы объектов которые нельзя добавлять в стек. Должна быть возможность добавления классов в черный список, проверка объекта на то, что класс, к которому он принадлежит, принадлежит или не принадлежит к классам в черном списке.

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class Stack {

private int stackPoint = 0;
private Object[] stack;
private BlackList blackList;

public Stack() {
super();
}

public Stack(Object[] stack) {
super();
this.stack = stack;
}

public int getStackPoint() {
return stackPoint;
}

public void setStackPoint(int stackPoint) {
this.stackPoint = stackPoint;
}

public Object[] getStack() {
return stack;
}

public void setStack(Object[] stack) {
this.stack = stack;
}

public BlackList getBlackList() {
return blackList;
}

public void setBlackList(BlackList blackList) {
this.blackList = blackList;
}

public void push(Object o) {
boolean ex = false;
try {
ex = blackList.classExistInBlackList(o);
} catch (NullPointerException e) {
}
if (!ex) {
stackPoint++;
Object[] newStack = new Object[stackPoint];
try {
newStack = Arrays.copyOf(stack, stackPoint);
} catch (NullPointerException e) {
}
newStack[stackPoint - 1] = o;
stack = newStack;
} else {
System.out.println("Class of your object is in black list");
}

}

public Object pop() {
try {
Object o = stack[stackPoint - 1];
stackPoint--;
Object[] newStack = new Object[stack.length - 1];
newStack = Arrays.copyOf(stack, stackPoint);
stack = newStack;
return o;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Stack is empty");
return null;
}

}

public Object peek() {
return stack[stackPoint - 1];
}

@Override
public String toString() {
return "Stack [stack=" + Arrays.toString(stack) + "]";
}

}

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class BlackList {

private Class[] blackList;

public BlackList() {
super();
}

public Class[] getBlackList() {
return blackList;
}

public boolean classExistInBlackList(Class cl) {
try {
for (Class class1 : blackList) {
if (cl == class1) {
return true;
}
}
} catch (NullPointerException e) {
// TODO: handle exception
}
return false;
}

public void addClassInBlackList(Class cl) {
if (!this.classExistInBlackList(cl)) {
try {
int n = blackList.length;
Class[] newBlackList = new Class[n + 1];
newBlackList[n] = cl;
for (int i = 0; i < n; i++) {
newBlackList[i] = blackList[i];
}
blackList = newBlackList;
} catch (NullPointerException e) {
Class[] blList = { cl };
blackList = blList;
}
System.out.println("Class is added");
}
}

public boolean classExistInBlackList(Object o) {
boolean ex = false;
for (Class class1 : blackList) {
if (o.getClass().equals(class1)) {
ex = true;
}
}
return ex;
}

@Override
public String toString() {
return "BlackList [blackList=" + Arrays.toString(blackList) + "]";
}
}

package com.gmail.iaroslavakorenovska;

public class Cat {

private String name;
private int age;

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

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

}

package com.gmail.iaroslavakorenovska;

public class Dog {
private String name;
private int age;

public Dog(String name, int age) {
super();
this.name = name;
this.age = age;
}

}

package com.gmail.iaroslavakorenovska;

import java.lang.Class;

public class Main {

public static void main(String[] args) {
// Создание стека
Stack st = new Stack();
System.out.println("Stack Pointer: " + st.getStackPoint());
System.out.println("-------");

// Заполнение стека и вывод на экран инф-ции о нем
st.push(12);
st.push(0.25);
st.push('a');
st.push("dfg");
st.push(new Cat("Vaska", 7));
System.out.println(st.toString());
System.out.println("Stack Pointer: " + st.getStackPoint());
System.out.println("-------");

// Проверка методов
System.out.println(st.peek());
System.out.println(st.toString());
System.out.println("-------");

int n = st.getStackPoint();
for (int i = 0; i <= n; i++) {
System.out.println(st.pop());
System.out.println(st.toString());
System.out.println("Stack Pointer: " + st.getStackPoint());
System.out.println("................");
}

// С черным списком
BlackList blList = new BlackList();
blList.addClassInBlackList(Cat.class);
blList.addClassInBlackList(Stack.class);
blList.addClassInBlackList(Dog.class);
st.setBlackList(blList);

st.push("dfg");
st.push(new Cat("Vaska", 7));
st.push(new Dog("Wolf", 7));
Object[] obj= {1,2,3};
st.push(new Stack(obj));
System.out.println(st.toString());

}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #40 : Февраля 05, 2020, 12:54:34 am »

Random

Решение верное

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #41 : Февраля 07, 2020, 06:33:50 pm »
Задача: Существуют три корабля. На каждом из них 10 ящиков груза. Они одновременно прибыли в порт, в котором только два дока. Скорость разгрузки - 1 ящик в 0.5 сек. Напишите программу, которая, управляя кораблями, позволит им правильно разгрузить груз.

package com.gmail.iaroslavakorenovska;

public class Main {

public static void main(String[] args) {
Port port = new Port(new Ship[] { new Ship(10, "One"), new Ship(10, "Two"), new Ship(10, "Three") });

Dock dock1 = new Dock(port);
Dock dock2 = new Dock(port);

Thread dock1Work = new Thread(dock1, "Dock1 ");
Thread dock2Work = new Thread(dock2, "Dock2 ");

dock2Work.start();
dock1Work.start();

}

}

package com.gmail.iaroslavakorenovska;

public class Port {
private Ship[] ships;

public Port() {
super();
}

public Port(Ship[] ships) {
super();
this.ships = ships;
}

public Ship[] getShips() {
return ships;
}

public void setShips(Ship[] ships) {
this.ships = ships;
}

}
package com.gmail.iaroslavakorenovska;

public class Ship {

private int cargo;
private String name;
private boolean busy = false;

public Ship(int cargo, String name) {
super();
this.cargo = cargo;
this.name = name;
}

public String getName() {
return name;
}

public boolean isBusy() {
return busy;
}

public synchronized void getCargoFromShip() {
if (busy == false) {
busy = true;
while (cargo > 0) {
cargo--;
System.out.println(Thread.currentThread().getName() + "Ship " + name + " box " + cargo);
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
System.out.println(e);
}
}

}
}

}

package com.gmail.iaroslavakorenovska;

import java.util.Arrays;

public class Dock implements Runnable {

private Port port;

public Dock(Port port) {
super();
this.port = port;
}

@Override
public void run() {
for (int i = 0; i < port.getShips().length; i++) {
try {
if (port.getShips()[i].isBusy() == false) {
port.getShips()[i].getCargoFromShip();
Ship[] notEmptyShips = Arrays.copyOfRange(port.getShips(), 0, port.getShips().length);
port.setShips(notEmptyShips);
} else {
continue;
}
} catch (NullPointerException e) {
System.out.println(e);
}
}
}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #42 : Февраля 09, 2020, 08:58:05 pm »
Random

Решение верное

Random

  • Пользователи
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #43 : Февраля 10, 2020, 09:48:13 am »
 Написать метод, который создаст список, положит в него 10 элементов, затем удалит первые два и последний, а затем выведет результат на экран.

package com.gmail.iaroslavakorenovska;

import java.util.*;

public class Main {

public static void main(String[] args) {
ArrayList list = new ArrayList();

for (int i = 0; i < 10; i++) {
int a = (int) (100 * Math.random());
list.add(a);
}

System.out.println("Your list: " + list);
System.out.println("Element " + list.remove(0) + " is deleted");
System.out.println("New list: " + list);
System.out.println("Element " + list.remove(0) + " is deleted");
System.out.println("New list: " + list);
System.out.println("Element " + list.remove(list.size() - 1) + " is deleted");
System.out.println("New list: " + list);

}

}

 Шелдон, Леонард, Воловиц, Кутрапалли и Пенни стоят в очереди за «двойной колой». Как только человек выпьет такой колы, он раздваивается и оба становятся в конец очереди, чтобы выпить еще стаканчик.  Напишите программу, которая выведет на экран состояние очереди  в зависимости от того, сколько стаканов колы выдал аппарат с чудесным напитком.

package com.gmail.iaroslavakorenovska;

import java.util.*;

public class Cola {
private ArrayList<String> list;

public Cola(ArrayList<String> list) {
super();
this.list = list;
}

public void drinkCola(int amountOfGlasses) {
for (int i = 0; i < amountOfGlasses; i++) {
String str = list.remove(0);
list.add(str);
list.add(str);
}
}

}

package com.gmail.iaroslavakorenovska;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Sheldon");
list.add("Leonard");
list.add("Volovitc");
list.add("Kutrapalli");
list.add("Penni");
System.out.println(list);

Cola cola = new Cola(list);

System.out.println("Input amount of glasses ");
Scanner sc = new Scanner(System.in);
try {
cola.drinkCola(sc.nextInt());
}
catch (InputMismatchException e) {
System.out.println(e);
}
sc.close();
System.out.println(list);

}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 14222
    • Просмотр профиля
    • E-mail
Re: Java_OOP_Alexander_Beresteyka_11_01_2020
« Ответ #44 : Февраля 11, 2020, 11:31:00 pm »
Random

Решение верное