Вот условие:
Создайте класс Phone (Телефон) одним из свойств должен быть его номер. Создайте класс Network (сеть мобильного оператора). В классе Телефон должны быть описаны следующие методы:
● Регистрация в сети мобильного оператора
● Метод реализующий исходящий звонок.
Данный метод принимает один параметр (описывающий номер мобильного телефона). Логика работы этого метода такова: если текущий телефон не прошел регистрацию в сети, то закончить работу метода с сообщением об этом. Если текущий телефон прошел регистрацию и в сети также
зарегистрирован телефон на номер которого совершается вызов, то вызвать метод входящий звонок у того телефона. Если телефон на номер которого вы совершаете вызов в сети не зарегистрирован, то закончить работу метода с сообщением об этом.
● Метод реализующий входящий звонок. Принимает параметр в виде номера с которого произвели вызов на текущий. Вывести сообщение вида вам звонит номер такой то
public class Main {
public static void main(String[] args) {
Network network = new Network();
Phone phone1 = new Phone(380684657399L);
network.registrationOfNewAbonent(phone1);
Phone phone2 = new Phone(380679861245L);
network.registrationOfNewAbonent(phone2);
phone1.call(380684657399L);
}
}
class Network {
Phone[] phones = new Phone[100];
public void registrationOfNewAbonent(Phone phone) {
for (int i = 0; i < phones.length; i++) {
if (phones[i] != null) {
continue;
} else {
phones[i] = new Phone(phone.getNumber());
break;
}
}
}
public boolean checkRegistration(long number) {
for (int i = 0; i < phones.length; i++) {
if (phones[i] == null) continue;
if (number == phones[i].getNumber()) {
return true;
}
}
return false;
}
}
class Phone {
private long number;
private Network network = new Network();
Phone(long number) {
this.number = number;
}
public long getNumber() {
return number;
}
public void setNumber(long number) {
this.number = number;
}
public void incomingCall(long number) {
System.out.println("The abonent " + number + " is calling you");
}
public void call(long numberReceive) {
if ((network.checkRegistration(this.number)) == true) { // Вот здесь всё время false. Я интуитивно понимаю, что
// проблема в поле Network network = new Network(), но
// как исправить не пойму. Если оставить просто
// Network network; то выкидывает NullPointerException
if (network.checkRegistration(numberReceive) == true) {
incomingCall(this.number);
} else {
System.out.println("The abonent you calling is not registered in network");
}
} else {
System.out.println("You are not registered in network");
}
}
}
Anonymous #2988619
39 уровень
Помогите, пожалуйста, с решением задачи
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел Безумный учёный Expert
18 февраля 2022, 19:46
Проблема заключается в наличии двух объектов Network. Создание сети и регистрация в ней двух абонентов выполняются в методе main(), но уже в классе Phone имеется своё приватное поле Network, инициализируемое новым объектом. Это означает, что каждый созданный объект типа Phone будет работать исключительно со своей сетью, находящейся у него внутри.
Чтобы исправить ситуацию, можно передавать единую созданную в main() сеть через дополнительный аргумент конструктора Phone():
0
Иван Борзов
18 февраля 2022, 20:07
Либо допустить существование только одной сети, тогда изменить конструктор new Network() под синглтон.
0