[HOMEWORK][OOP - June 2015]OOP-Static-Members-and-Namespaces
Здравейте колеги, ето моите решения на задачите от това домашно :
Отворен съм към всякакви забележки и въпроси :)
Здравейте колеги, ето моите решения на задачите от това домашно :
Отворен съм към всякакви забележки и въпроси :)
Поздравления за домашното.
Единствената ми забележка е, че във втора задача си забравил да вземеш корен квадратен от резутата, при изчисляването на разстоянието между две точки.
Math.Pow е препоръчително да се ползва само за по-тежки изчисления, като да вдигнеш реално число на степен друго реално число. За степен цяло число по-бързо е ако се смята в цикъл, а за повдигане на степен 2 - по-скоро да се напише с обикновено умножение.
В Point3D, ред 17 е изпуснат this-a.
В Path3D добавянето на множество точки към списъка може да стане с AddRange метода вместо с цикъл.
При четенето на path от файл, хубаво е регекса ти да хваща цяла точка, т.е. да разпишеш по-подробно формата, който очакваш, за да не се окаже, че някой ти подава нещо такова например (което не е валидно): point: x=-3 x=20 x=0
Оказа се, че доста се затрудних с домашното в частта Problem 3.Paths
Не съм стигнала още до Class Storage, защото гледах решението по-горе и доста се обърках. (има някакви методи с които се пълни масив...)
Доколкото разбирам пъво трябва да направим клас, който да съхранява поредица от 3D точки,
след това трябва да направим друг клас, който има два метода: единият да записва изчисления път на поредица от точки, а другия....???
Имам КОД за за първия клас и исках да знам дали така е правилно да се напише. (сложила съм два класа в един файл, но е само за демо-то)
Галя ще ти подскажа малко. Класа Path ти се състои от List<Point3D> и метод AddPoint(Point3D point) (Добави си метод за добавяне нa елементи към листа в твоя клас). Относно Storage класа защо не разгледаш JSON.NET библиотечката - има я в NuGet. (или да ползваш XML но той се чете по гадно). Имаш 4 метода. Първия сериализира обекта от клас Path, втория записва стринга в текстов файл , третия чете стринга и четвъртития десериалира.
@ Filkolev Не знам, дали така е по-правилно или ни карате да ги пишем тия this-ове заради предстоящата джава, ама C# компилатора разбира за кой стартинг пойнт става дума в случая. Включително може да се мине и без this-овете пред пропъртитата.
В нещо подобно, където конструктора бърка директно във фийлдовете без да ползва пропъртита, this ще е задължително.
public Point3D(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
то и за да няма недоразумения уж в последната нейминг конвенция фийлдовете трябва да се пишат с '_' демек горното трябва да изглежда така:
public Point3D(double x, double y, double z)
{
_x = x;
_y = y;
_z = z;
}
Поправете ме ако греша, или не съм доразбрал на Майкрософт изискванията...
До ТУК стигнах с задача 3.Paths и се предавам. Работи, но има какво да се пипне.
Ако има някой съвети за подобряването й, насреща съм.
Някой може ли да ми каже как да избегна един проблем в задача 3. Значи напрвил съм го така за сега - в основанта си програма питам потребителя колко точки иска да въведе и си правя един for цикъл от 0 до колкото ми е казал. Вътре в този for цикъл вземам кординатите и на точката и си викам метода от класа Storage, който ги записва в един текстов файл с помоща на StreamWriter - значи би трябвало ако има 2 точки да речем във файла си да има 2 реда с по 3 числа на вески ред разделени с интервал, но на пракатика винаги има само 1 ред в който са кординатите на последната точка, а останалите се затриват. Тоест StreamWriter-a винаги пише от началото на файла. Как да избегна това?
Вариqнта който ползваш можеби не е от най-бързите но можеш да използваш този конструктор за StreamWriter.
public StreamWriter(string path, bool append);
Защо не ползваш StreamBilder и не записваш накрая?
https://github.com/onefen/Homework-Static-Members-and-Namespaces
Ето ги моите решение. Задачите работят коректно без трета - в нея има два проблема. Първият вече го спонах какъв е. Вторият е, че ми дава Expetion при четенето от файла.
Здравейте, аз пък има проблем с добавянето на Reference във втора задача още. Правя всичко точно както е показано в клипчето, отстрани в Solution Explorer ми излиза, че съм добавила вече първа задача и мога да я използвам, но после като започна да извиквам класа Point3D не се получава. Ако някой може да ми помогне ще съм му много благодана. Лек ден на всички!
Добави ли using namespace-a на Point3D ?
Да, добавих го, но след като започна да викам класа point3d ми излиза по подразбиране namespace_01Point3d, а не самия клас..
Най-добре ще е да покажеш нагледно точно какво имаш предвид, че така нещо не мога да те разбера.