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

сделал лишь RadarContactImpl
тесты проходит нормально,а вот c Radarimpl и компаратором судя по всему проблема
просто два дня бьюсь над этим классом и врядли уже побью ,а мне еще более 20 тестов пройти только по SE
помогите добить кому не сложно эти два класса
...
Рейтинг: 0 / 0
11.06.2019, 10:58
    #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
11.06.2019, 11:11
    #39825242
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
Абсолютно правильный тесткейс, проверяющий то что твой сервис испоользует защитное копирование.

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

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

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

то два теста сами себе противоречат
в одном случае требует чтобы вернул сколько всего добавили в лист,даже если удалял из него что то ,во втором случае нужно вернуть коректное значение текущего состояния листа
как это сделать в одном методе ,который не приимает ни каких параметоров хотя чтобы можно было как то реализовать условия ,которые от меня хотят
да и не суть это уже я запутался окончально и все равно уже не вывезу этот тест
нужно чтобы кто то трезвым взглядом написал решение и все
...
Рейтинг: 0 / 0
11.06.2019, 11:21
    #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
11.06.2019, 11:22
    #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
11.06.2019, 11:24
    #39825250
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
asv79,

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

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

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

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



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


ничего не получается
сделал геттер -ничего не получается
так как изменение одного объекта ведет к изменению всех ссылок на этот обьект -тобишь нужно какую то копию чтоли делать и видимо в методе каком то непонятном
ничегоо не понимаю аааааа ппц
...
Рейтинг: 0 / 0
11.06.2019, 12:01
    #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
11.06.2019, 12:02
    #39825274
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
Проблема не в getcontactcount и не в removecontact. А в getcontactlist, я тебе уже 3 раза написал
...
Рейтинг: 0 / 0
11.06.2019, 12:03
    #39825276
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
А ну да, он у тебя называется returncontacts, ну суть та же
...
Рейтинг: 0 / 0
11.06.2019, 12:33
    #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
11.06.2019, 12:35
    #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
11.06.2019, 12:37
    #39825309
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
правда это не спасет от вариант если предусмотрительно сохранить ссылочку на список до передачи в radarimpl
...
Рейтинг: 0 / 0
11.06.2019, 12:48
    #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
11.06.2019, 12:48
    #39825315
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
lleming,

Кстати да, хороший поинт.
Если в конструктор предают мутабельные элементы, типо date,list и т.д - не присваивай их напрямую своим филдам, а также делай копию и только потом присваивай
...
Рейтинг: 0 / 0
11.06.2019, 12:55
    #39825322
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
А насчёт телепатии - на самом деле это просто принципы грамотного проектирования, и их должны знать. Но учитывая что ты на стажировке, то логично что ты этого можешь не знать и тупо от тебя требовать чтото
...
Рейтинг: 0 / 0
11.06.2019, 13:09
    #39825341
asv79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
забыл никА насчёт телепатии - на самом деле это просто принципы грамотного проектирования, и их должны знать. Но учитывая что ты на стажировке, то логично что ты этого можешь не знать и тупо от тебя требовать чтото
да я вот тоже так думаю,что на начальном курсе java -тем более без каких либо требований ожидать,что я сам угадаю)
это вообще задание на коллекции если что было))
вчера я например боролся с какими то градусами,вместо того чтобы отрабатывать коллекции)
но в общем и целом это хороший курс я думаю ,но и очень сложный.
час вот модуль многопоточности ,боюсь представить что там
...
Рейтинг: 0 / 0
11.06.2019, 13:55
    #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
11.06.2019, 14:12
    #39825406
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовое задание
asv79забыл никА насчёт телепатии - на самом деле это просто принципы грамотного проектирования, и их должны знать. Но учитывая что ты на стажировке, то логично что ты этого можешь не знать и тупо от тебя требовать чтото
да я вот тоже так думаю,что на начальном курсе java -тем более без каких либо требований ожидать,что я сам угадаю)
это вообще задание на коллекции если что было))
вчера я например боролся с какими то градусами,вместо того чтобы отрабатывать коллекции)
но в общем и целом это хороший курс я думаю ,но и очень сложный.
час вот модуль многопоточности ,боюсь представить что там
Многопоточку я-бы вообще не давал начинающим. Нет у них в принципе на производсве таких
задач которые сразу потребуют такой архитектуры. Или их разработки надо тщательно ревьювить
и тестировать с особым пристальным вниманием.

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


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