1 Востаннє редагувалося idosyn2 (23.12.2017 16:57:42)

Тема: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Суть завдання:

Описати клас студентська група.
-можливість роботи з довільною кількістю записів
-пошук записів за деякою ознакою
-додавання і вилучення записів
-сортування за прізвищем
-доступ до запису за номером

1. Дві ідентичні з вигляду помилки
2. Взагалі нема певності, що в правильному напрямі просуваюсь
3. Поки-що не вїжджаю взагалі в якому напрямку думати стосовно реалізації сортування. Може, це якийсь метод ліста? Але через що?
Допоможіть початківцю. Початківець буде вдячний.

Post's attachments

errors2.PNG 492.22 kb, 12 downloads since 2017-12-22 

2 Востаннє редагувалося idosyn2 (22.12.2017 14:22:11)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

1.

Post's attachments

Program.cs 1.87 kb, 96 downloads since 2017-12-22 

3

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

2.

Post's attachments

Student.cs 1.52 kb, 111 downloads since 2017-12-22 

4 Востаннє редагувалося idosyn2 (22.12.2017 14:26:22)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

3. Ось тут помилка. В методах
public Student GetStudentForName(string f, string l)
public Student GetStudentForBirth(DateTime d)

Post's attachments

Group.cs 1.51 kb, 111 downloads since 2017-12-22 

5

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Викладайте код прямо сюди, в тег code. Незручно.
Рядки 35, 43 - i++ недосяжний, бо в обох гілках return. До i++ не дійде.

6

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Стосовно ==, !=, Equals і GetHashCode - класи передаються за посиланням, тобто Student s - це не об'єкт класу Student, а посилання на об'єкт. Відповідно, порівняння == буде видавати рівність не вмісту об'єктів, а посилань (тобто чи посилаються порівнювані змінні на один і той самий об'єкт), тому бажано, якщо вже почали перевизначати деякі порівняння, перевизначати їх усіх.

Подякували: leofun011

7 Востаннє редагувалося idosyn2 (23.12.2017 16:45:32)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

public Student GetStudentForBirth(DateTime d) {
            Student st = null;
            for(int i = 0; i < students.Count; i++) {
                if(students[i].Birth == d)
                    st = students[i];
            }
             return st;
        }
        
public Student GetStudentForName(string f, string l) {
            Student st = null;
            for(int i = 0; i < students.Count; i++) {
                if((students[i].Firstname == f) & (students[i].Lastname == l))
                    st = students[i];
            }
            return st;
        }

Переробила ось так. Дякую.

Подякували: 0xDADA11C7, koala2

8 Востаннє редагувалося koala (23.12.2017 21:11:02)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Оскільки нас не цікавить номер елементу в масиві, а результат пошуку, як я розумію, не обов'язково має бути останнім (нас влаштовує будь-який елемент з відповідною характеристикою, так?), то

public Student GetStudentForBirth(DateTime d) {
            foreach(Student st in students) {//foreach безпечніший за for, якщо його можна застосувати
                if(st.Birth == d) {
                    return st;//перериваємо цикл
                }
            }
        }

Потім, операція & - це бітове І, на відміну від логічного &&. Результат що &, що && для булевих значень однаковий, але && швидша, бо не обчислює другий операнд, якщо перший false. Тому

                if((students[i].Firstname == f) && (students[i].Lastname == l))

Ну і, нарешті, List має вбудований метод Find, який робить саме те, що треба, але потребує додаткової функції для порівняння. Цю функцію можна зробити анонімною:

public Student GetStudentForBirth(DateTime d) {
            return students.Find( (st) => (st.Birth == d) );
        }

public Student GetStudentForName(string f, string l) {
            return students.Find( (st) => ( (st.Firstname == f) && (st.Lastname == l) ) );
        }

і навіть додати додатковий метод для пошуку за предикатом:

public Student GetStudentByPredicate(Predicate<Student> match) {
            return students.Find( match );
        }
Подякували: NagarD, Torbins, leofun013

9

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

А, і ще: якщо просто перейменувати .psd-файл на .png, він не стає .png. Треба через меню вибрати "зберегти як" чи як воно там в Photoshop.

Подякували: Torbins1