powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестовое задание
25 сообщений из 112, страница 1 из 5
Тестовое задание
    #39825217
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят не могу пробиться уже 2 дня в тестовом задании
https://github.com/apb12/SE_Alekseev/tree/master/src/sef/module9/activity

сделал лишь RadarContactImpl
тесты проходит нормально,а вот c Radarimpl и компаратором судя по всему проблема
просто два дня бьюсь над этим классом и врядли уже побью ,а мне еще более 20 тестов пройти только по SE
помогите добить кому не сложно эти два класса
...
Рейтинг: 0 / 0
Тестовое задание
    #39825236
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас у меня в классе RadarImpl проходят два теста
из 4х в этом классе это TestRemove and TestRadar
два других теста не проходят
первое падение происходит вот тут
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public void testGetList(){
			try{
			Radar r = new RadarImpl();
			RadarContact r1 = new RadarContactImpl("R1", 15, 1000);
			RadarContact r2 = new RadarContactImpl("R2", 360, 2000);
			RadarContact r3 = new RadarContactImpl("R3", 180, 122.3);
			
			r.addContact(r1);
			r.addContact(r2);
			r.addContact(r3);
			
			List list = r.returnContacts();
			
			assertEquals(list.size(), 3);
			assertTrue(list.contains(r1));
			assertTrue(list.contains(r2));
			assertTrue(list.contains(r3));
			
			list.remove(r1);
			assertEquals(3, r.getContactCount());


в тесте добавляется 3 обьекта ,потом один удаляется и почему то хотят чтобы метод getContactCount вернул 3 вместо 2
а метод getContactCount -возвращает размер списка
я подумал по другому -значит должно возвращать просто сколько всего было добавлено в список не зависимо удалено или нет.
ввел глобальную инту и добалял к ней значение каждый раз,когда срабатывал метод addContacts,но и это оказалось неверно,так как
в тесте testRemove уже вот такие строчик

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public void testRemove(){
			try{
			Radar r = new RadarImpl();
			RadarContact r1 = new RadarContactImpl("R1", 15, 1000);
			RadarContact r2 = new RadarContactImpl("R2", 360, 2000);
			RadarContact r3 = new RadarContactImpl("R3", 180, 122.3);
			
			r.addContact(r1);
			r.addContact(r2);
			r.addContact(r3);
			
			assertEquals(3, r.getContactCount());
			assertNull(r.removeContact("NO_CONTACT"));
			assertSame(r.removeContact("R2"), r2);
			assertNull(r.removeContact(r2.getContactID()));
			assertEquals(2, r.getContactCount());


тоесть при удалени обьекта требует размер списка текущего
короче я окончательно запутался ,либо тесты кривые либо я уже не знаю чего делать
...
Рейтинг: 0 / 0
Тестовое задание
    #39825242
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолютно правильный тесткейс, проверяющий то что твой сервис испоользует защитное копирование.

Читай блоха до просветления) конкретно по твоему случаю - http://thefinestartist.com/effective-java/39, только он там про даты говорит, а тебе нужно делать копии листа.

Единственное что смущает что тебе не объяснили что этот тест должен делать, тренируют телепатию?
...
Рейтинг: 0 / 0
Тестовое задание
    #39825246
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

в инетерфейсе написано ,по этому классу в комментах радара написано ,что хотят
хорошо если копировать лист

то два теста сами себе противоречат
в одном случае требует чтобы вернул сколько всего добавили в лист,даже если удалял из него что то ,во втором случае нужно вернуть коректное значение текущего состояния листа
как это сделать в одном методе ,который не приимает ни каких параметоров хотя чтобы можно было как то реализовать условия ,которые от меня хотят
да и не суть это уже я запутался окончально и все равно уже не вывезу этот тест
нужно чтобы кто то трезвым взглядом написал решение и все
...
Рейтинг: 0 / 0
Тестовое задание
    #39825248
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
package sef.module9.activity;

import java.util.Comparator;
import java.util.List;

/**
 * Interface representing the behavior of a Radar 
 *
 */
public interface Radar {

	/**
	 * Adds a RadarContact to the Radar's list of contacts.  Each contact is unique
	 * according to the RadarContact.getContactID().  If another contact is added with the 
	 * same ID, it will replace the attributes of the existing contact with the specified
	 * contact.
	 * 
	 * Null parameters are ignored and not added
	 * 
	 * @param contact the RadarContact to be added
	 * 
	 * @return A reference of the actual RadarContact object added to the contact list
	 */
	public RadarContact addContact(RadarContact contact);
	
	
	/**
	 * Removes the specified contact from the contact list with the specified contactID
	 * This method will return null if the contactID is not listed 
	 * 
	 * @param id the id of the RadarContact to remove
	 * 
	 * @return reference to the RadarContact object removed from the list
	 */
	public RadarContact removeContact(String id);
	
	
	/**
	 * Returns a reference to the RadarContact specified by the parameter.  This
	 * method will return null if the id is not listed
	 * 
	 * @param id the id of the RadarContact to find
	 * 
	 * @return
	 */
	public RadarContact getContact(String id);
	
	
	
	/**
	 * Returns the number of RadarContacts tracked by this Radar
	 * 
	 * @return the count of RadarContacts
	 */
	public int getContactCount();
	
	
	/**
	 * Returns a List of RadarContacts tracked by this Radar.  The order of the list
	 * depends on the current Radar implementation
	 * 
	 * @return List of RadarContacts
	 */
	public List<RadarContact> returnContacts();
	
	
	/**
	 * Returns a list of RadarContacts tracked by this Radar, ordered by the Comparator used
	 * 
	 * @param comparator Comparator to be used
	 * @return ordered List of RadarContacts
	 */
	public List<RadarContact> returnContacts(Comparator<RadarContact> comparator);
	
}



вот что требуется
...
Рейтинг: 0 / 0
Тестовое задание
    #39825249
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот что я на данный момент сделал
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
package sef.module9.activity;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Implementation of a Radar 
 * 
 *
 */
public class RadarImpl implements Radar{
	private List<RadarContact>contactList=new ArrayList<>();
	private RadarContact contact;

	
	/**
	 *  Constructs a new Radar 
	 */
	public RadarImpl(){
		
	}
	
	
	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#addContact(sef.module8.activity.RadarContact)
	 */
	public RadarContact addContact(RadarContact contact) {

		removeContact(contact.getContactID());
		contactList.add(contact);

		return contact;
	}


	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#getContact(java.lang.String)
	 */
	public RadarContact getContact(String id) {
		for(RadarContact r:contactList){
			if(r.getContactID().equals(id)){
				return r;
			}
		}
		return null;
	}

	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#getContactCount()
	 */
	public int getContactCount() {
		
		return contactList.size();
	}

	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#removeContact(java.lang.String)
	 */
	public RadarContact removeContact(String id) {
		for(RadarContact r:contactList){
			if(r.getContactID().equals(id)){
				contactList.remove(r);
				return r;

			}
		}return null;

	}

	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#returnContacts()
	 */
	public List<RadarContact> returnContacts() {
		return contactList;
	}

	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#returnContacts(java.util.Comparator)
	 */
	public List<RadarContact> returnContacts(Comparator<RadarContact> comparator) {
		contactList.sort(comparator);
		return contactList;
		//return Collections.sort(arg0, new DistanceComparator());
	}

	
}
...
Рейтинг: 0 / 0
Тестовое задание
    #39825250
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

Читай что тебе пишут, а не свои фантазии.
В первом случае ты вызываешь метод, который присваивает значение переменной типа list. Это отдельная ссылка, это не состояние твоего radarservice. Поэтому если ты меняешь лист, то это не должно отразиться на состоянии радарсеовиса.
Во втором тесте, ты удаляешь напрямую через радарсервис, и в этом случае состояние должно измениться.

Тебе надо в геттере делать копию листа, вот и все.
...
Рейтинг: 0 / 0
Тестовое задание
    #39825251
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,все это супер ,но я не понима того чего ты мне сказал к сожалению((
я два дня смотрю на этот класс и уже не в сосстоянии ничего придумать к сожалению
геттер-для поля лист и что с ним делать?и чем это будет отличаться от того,что напрямую удаляют
сорри но я ничего не понял -мне нужно увидеть код чтобы понять,абстракции моя голова уже не воспринимает
...
Рейтинг: 0 / 0
Тестовое задание
    #39825254
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да там все равно если в тесте просто схитрить и подставить нужные значения,то дальше еще куча красноты вываливается.
...
Рейтинг: 0 / 0
Тестовое задание
    #39825259
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну для этого и надо было прочитать статью, что я скинул.

Каждый класс несёт ответственность за свои инварианты. ContactList - часть состояния класса, в геттере ты возвращаешь этот лист, и кто-то может изменить контактлист вне класса(как в первом тесте). То есть проблема в том, что две ссылки, первая это контактлист внутри класса, а вторая это переменная типа лист в тесте.
Как это пофиксить? В геттере надо возвращать не ссылку а заново сконструированный лист на основе контактлист.

Код: java
1.
Getcontactlist() = return new arraylist(contactlist);



Вот и вся проблема.
Если говорить шире - то ты должен писать такой код, чтобы ты принимал состояние через конструктор, проверяя из на валидность.. а изменения только через методы этого же класса, который ты и только ты контролируешь
...
Рейтинг: 0 / 0
Тестовое задание
    #39825266
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНу для этого и надо было прочитать статью, что я скинул.

Каждый класс несёт ответственность за свои инварианты. ContactList - часть состояния класса, в геттере ты возвращаешь этот лист, и кто-то может изменить контактлист вне класса(как в первом тесте). То есть проблема в том, что две ссылки, первая это контактлист внутри класса, а вторая это переменная типа лист в тесте.
Как это пофиксить? В геттере надо возвращать не ссылку а заново сконструированный лист на основе контактлист.

Код: java
1.
Getcontactlist() = return new arraylist(contactlist);



Вот и вся проблема.
Если говорить шире - то ты должен писать такой код, чтобы ты принимал состояние через конструктор, проверяя из на валидность.. а изменения только через методы этого же класса, который ты и только ты контролируешь
я уже это понял ,но не понимаю как это реализовать в моем примере,тоесть вот у меня сейчас проблема в методе

Код: java
1.
2.
3.
4.
public int getContactCount() {
		
		return ?
	}



и я так понял в методе

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public RadarContact removeContact(String id) {
		for(RadarContact r:contactList){
			if(r.getContactID().equals(id)){
				contactList.remove(r);
				return r;

			}
		}return null;

	}


я не понимаю куда мне добвлять геттеры и что это должны быть за геттеры поля лист или самого класса вообщем не обращай внимания но у меня просто котелок не варит я не понимаю куда что подставить чтоб заработало((((
...
Рейтинг: 0 / 0
Тестовое задание
    #39825268
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал вот так
Код: java
1.
2.
3.
4.
public int getContactCount() {
		
		return new ArrayList<>(contactList).size();
	}


ничего не получается
сделал геттер -ничего не получается
так как изменение одного объекта ведет к изменению всех ссылок на этот обьект -тобишь нужно какую то копию чтоли делать и видимо в методе каком то непонятном
ничегоо не понимаю аааааа ппц
...
Рейтинг: 0 / 0
Тестовое задание
    #39825271
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

Тут надо скорее всего копию листа вернуть.
Код: java
1.
2.
3.
4.
5.
6.
	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#returnContacts()
	 */
	public List<RadarContact> returnContacts() {
		return contactList;
	}



И тут надо скорее всего создавать копию. Сортировать ее и возвращать отсортированную копию.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#returnContacts(java.util.Comparator)
	 */
	public List<RadarContact> returnContacts(Comparator<RadarContact> comparator) {
		contactList.sort(comparator);
		return contactList;
		//return Collections.sort(arg0, new DistanceComparator());
	}
...
Рейтинг: 0 / 0
Тестовое задание
    #39825274
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема не в getcontactcount и не в removecontact. А в getcontactlist, я тебе уже 3 раза написал
...
Рейтинг: 0 / 0
Тестовое задание
    #39825276
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ну да, он у тебя называется returncontacts, ну суть та же
...
Рейтинг: 0 / 0
Тестовое задание
    #39825304
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

вот ты красасава,все заработало)
я сделал вот так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	public List<RadarContact> returnContacts() {
		return new ArrayList<>(contactList);
	}

	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#returnContacts(java.util.Comparator)
	 */
	public List<RadarContact> returnContacts(Comparator<RadarContact> comparator) {
		contactList.sort(comparator);
		return new ArrayList<>(contactList);
		
	}


теперь я начал понимать немного

в тесте мы созадали новый лист с помощью этих методов
и любые манипуляции с этим объектом извне ни как не повлияют на состояние поля contactList

Код: java
1.
List list = r.returnContacts();



а при вызове метода getCountList мы обращаемся не к этому листу а к полю contactList,которое может менять свое состояние только с помощью методов addContacts and RemoveContacts

просто шикарно))спасибо тебе ник.
но честно говоря об этом нет ни слова в задании - и как ты правильно заметил нужно видимо обладать телепатией
...
Рейтинг: 0 / 0
Тестовое задание
    #39825307
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо делай копии либо возвращай
Код: java
1.
2.
3.
4.
5.
public List<RadarContact> returnContacts(Comparator<RadarContact> comparator) {
		contactList.sort(comparator);
		return Collections.unmodifiableList(contactList);
		//return Collections.sort(arg0, new DistanceComparator());
}
...
Рейтинг: 0 / 0
Тестовое задание
    #39825309
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правда это не спасет от вариант если предусмотрительно сохранить ссылочку на список до передачи в radarimpl
...
Рейтинг: 0 / 0
Тестовое задание
    #39825314
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingЛибо делай копии либо возвращай
Код: java
1.
2.
3.
4.
5.
public List<RadarContact> returnContacts(Comparator<RadarContact> comparator) {
		contactList.sort(comparator);
		return Collections.unmodifiableList(contactList);
		//return Collections.sort(arg0, new DistanceComparator());
}


спасибо большое,уже реализовал.
я просто пропустил вот эту строчку в тесте

Код: java
1.
List list = r.returnContacts();


и думал что тест работает с полем текущего обьекта и никак не понимал что от меня хотят.
...
Рейтинг: 0 / 0
Тестовое задание
    #39825315
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

Кстати да, хороший поинт.
Если в конструктор предают мутабельные элементы, типо date,list и т.д - не присваивай их напрямую своим филдам, а также делай копию и только потом присваивай
...
Рейтинг: 0 / 0
Тестовое задание
    #39825322
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А насчёт телепатии - на самом деле это просто принципы грамотного проектирования, и их должны знать. Но учитывая что ты на стажировке, то логично что ты этого можешь не знать и тупо от тебя требовать чтото
...
Рейтинг: 0 / 0
Тестовое задание
    #39825341
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никА насчёт телепатии - на самом деле это просто принципы грамотного проектирования, и их должны знать. Но учитывая что ты на стажировке, то логично что ты этого можешь не знать и тупо от тебя требовать чтото
да я вот тоже так думаю,что на начальном курсе java -тем более без каких либо требований ожидать,что я сам угадаю)
это вообще задание на коллекции если что было))
вчера я например боролся с какими то градусами,вместо того чтобы отрабатывать коллекции)
но в общем и целом это хороший курс я думаю ,но и очень сложный.
час вот модуль многопоточности ,боюсь представить что там
...
Рейтинг: 0 / 0
Тестовое задание
    #39825380
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79забыл ник,

вот ты красасава,все заработало)
я сделал вот так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	/* (non-Javadoc)
	 * @see sef.module8.activity.Radar#returnContacts(java.util.Comparator)
	 */
	public List<RadarContact> returnContacts(Comparator<RadarContact> comparator) {
		contactList.sort(comparator);
		return new ArrayList<>(contactList);
		
	}




Сортировку надо делать на копии, а то иначе ConcurrentModificationException будут
...
Рейтинг: 0 / 0
Тестовое задание
    #39825406
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79забыл никА насчёт телепатии - на самом деле это просто принципы грамотного проектирования, и их должны знать. Но учитывая что ты на стажировке, то логично что ты этого можешь не знать и тупо от тебя требовать чтото
да я вот тоже так думаю,что на начальном курсе java -тем более без каких либо требований ожидать,что я сам угадаю)
это вообще задание на коллекции если что было))
вчера я например боролся с какими то градусами,вместо того чтобы отрабатывать коллекции)
но в общем и целом это хороший курс я думаю ,но и очень сложный.
час вот модуль многопоточности ,боюсь представить что там
Многопоточку я-бы вообще не давал начинающим. Нет у них в принципе на производсве таких
задач которые сразу потребуют такой архитектуры. Или их разработки надо тщательно ревьювить
и тестировать с особым пристальным вниманием.

+Многопоточка выходит за рамки обычного Java-world, где радуга и единороги. Многопоточка
стоит одной ногой на hardware, registers, caches, atomic e.t.c. термины которые надо в принципе
знать как инженеру. Вобщем если вы на сях хорошо кодили multithreading то зайдете в это дело
быстро даже не разбираясь в Java. Но если вы - полный junior - то надо навёрстывать упущенное.
...
Рейтинг: 0 / 0
Тестовое задание
    #39825549
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да кроме того та самая низкоуровневая многопоточка может понадобиться в основном только в ну очень утилитарных задачах. в спринг-бут мире всяких недоэнтерпрайзприложений ее около нуля или ограничена она футурами это в лучшем случае.
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 1 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестовое задание
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]