Софтуерно Инженерство
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
tilchev92 avatar tilchev92 Trainer 128 Точки

Цял скелет надали, но ще имате някой друг клас имплементиран (може би недовършен и/или с бъгове). Ще трябва да го рефакторирате по принципите на ООП, ООД и т.н., които изучавахме този и миналия курс.

2