6. Students 2.0- ProgrammingFundamentals
Здравейте, може ли помощ за логиката ми за следната задача, тъй като за OOP в Fundamentala се отделя само една лекция, в която не се решават и всички задачи от Лаба. Лекторите дават всичко от себе си, но просто материала е много голямо количество за да бъде поместен в една лекция от 3 часа. Търсих и информация в stack overflow за реализиране на моята логика за конкретната задача, но възможностите ми дадоха резултат 0/100 за жалост.
Ето и задачата: https://judge.softuni.bg/Contests/Practice/Index/1214#5
Use the class from the previous problem. If you receive a student, which already exists (first name and last name
should be unique) overwrite the information.
Input
John Smith 15 Sofia
Peter Ivanov 14 Plovdiv
Peter Ivanov 25 Plovdiv
Linda Bridge 16 Sofia
Linda Bridge 27 Sofia
Simon Stone 12 Varna
end
Sofia
Output
John Smith is 15 years old.
Linda Bridge is 27 years old.
Логиката ми:
1. Ще чета стринговете: firstName, lastName, age, city в while цикъл, докaто командата е различна от "end".
2. Ако съществува в ListOfStudents обекта student.firstName==firstName(стринга) и същевременно student.lastName==lastName(стринга), то значи ще имаме опит за презаписване на информация.
3. Намирам кой е този индекс в ListOfStudents и го изтривам, като оставям да се презапише новата информация, т.е. създавам нов обект student и го добавям към ListOfStudents.
4.Ако нямаме опит за презаписване, то винаги ще си създавам нов обект student и ще го добавям към листа.
5. Чета от конзолата нов град и спрямо този град ще филтрирам ListOfStudents и ще печатам само елементите от новия List- FilteredStudent.
using System;
using System.Linq;
using System.Collections.Generic;
namespace ObjectsAndClasses
{
class MainClass
{
public static void Main()
{
var listOfStudents = new List<Student>();
string command = Console.ReadLine();
while (command != "end")
{
string[] commandArrguments = command.Split();
string firstName = commandArrguments[0];
string lastName = commandArrguments[1];
string agee = commandArrguments[2];
string city = commandArrguments[3];
Student student = null;
bool fistNameExist = listOfStudents.Exists(s => s.FirstName.Contains(firstName));
bool lastNameExist = listOfStudents.Exists(s => s.LastName.Contains(lastName));
if (fistNameExist && lastNameExist)
{
var firstRepitableIndex = listOfStudents.IndexOf(student);
listOfStudents.RemoveAt(firstRepitableIndex);
}
student = new Student();
student.FirstName = firstName;
student.LastName = lastName;
student.Agee = agee;
student.City = city;
listOfStudents.Add(student);
command = Console.ReadLine();
}
string filteredCity = Console.ReadLine();
List<Student> FilteredStudent = listOfStudents.Where(s => s.City == filteredCity).ToList();
foreach (var student in FilteredStudent)
{
Console.WriteLine($"{student.FirstName} {student.LastName} is {student.Agee} years olg.");
}
}
}
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Agee { get; set; }
public string City { get; set; }
}
}
Hello Axiomatik,
I really appreciate you helping me out ! Thanks to you, now I know how I can set individual objects in same list without necessary removing another and adding the same.
All the best!
Elena