Loading...
vilimir.vladimirov avatar vilimir.vladimirov 6 Точки

[ Advanced OOP][Java] 03. BarracksWars - A New Factory [SOLVED]

Здравейте,

Като пусна тестовете на моя компютър тестовете ми излизат както си трябва, а пък на judge ми дава някакъв проблем с output-a.

 

Ето какво показва judge:

 

 

А това излиза при мен:

Не съм пипал по кода на задачата, освем да добавя 2-та нови класа и да оправя factory-то да е с рефлекшън, някакви идеи ?

Тагове:
0
C# OOP Basics 26/07/2016 17:30:07
vilimir.vladimirov avatar vilimir.vladimirov 6 Точки

Намерих проблема, вече ми е със 100/100.

 

В UnitRepository класа има метода getStatistics и е следния:

public String getStatistics() {
		StringBuilder statBuilder = new StringBuilder();
		for (Map.Entry<String, Integer> entry : amountOfUnits.entrySet()) {
			String formatedEntry =
					String.format("%s -> %d%n", entry.getKey(), entry.getValue());
			statBuilder.append(formatedEntry);
		}
		statBuilder.setLength(statBuilder.length() - 1);

		return statBuilder.toString();
	}

Не зная защо, но като е с %n прави проблем и StringBuilder-а не си трие последния нов ред, обаче като му дам \n като символ, а не placeholder, всичко е ОК.

 

Лично аз предполагам, че проблема идва от там че %n е placeholder, който според системата се променя на \n или \r\n и от там идва проблема, но това е само спекулация.

0
26/07/2016 18:02:58
tilchev92 avatar tilchev92 Trainer 128 Точки

Да правилно си се ориентирал, реално String.format("%n") е същото като System.lineSeparator(), който при различните ОС е различен. При някой е \n - 1 символ, а при други е \r\n - 2 символа. Това чупи:

 

statBuilder.setLength(statBuilder.length() - 1);

За целта трябва да се промени на:

statBuilder.setLength(statBuilder.length() - System.lineSeparator().length());

Така динамично ще се променя според ОС, колко да махне от стринг билдъра за да нямаме ред в края на репорта. Извинявам се за грешката в скелета - оправих го по-рано днес. Въпреки това е полезно да можете да откривате такива грешки в скелети, защото на изпита може да имате нарочно допуснати такива.

 

По-здрави!

0
26/07/2016 17:49:22
vilimir.vladimirov avatar vilimir.vladimirov 6 Точки

За System.lineSeparator().length() не се бях сетил, но е доста елегантно решение на проблема.

Благодаря за отговора.

1
kaloyannikov avatar kaloyannikov 531 Точки

на изпита с готов скелет ли ще е задачата ? 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.