Average Load Time Calculator - Problem with Input
В задача 9 от домашното за C# Advanced Topics, input-a е произволен брой редове. Ако се чете от файл, може да стане със StreamReader, но от конзолата нямам идея как да прочета неизвестен брой редове. Някой има ли идея, че не намирам нищо в Гугъл?
Problem 9. Average Load Time Calculator
We have a report that holds dates, web site URLs and load times (in seconds) in the same format like in the examples below. Your tasks is to calculate the average load time for each URL. Print the URLs in the same order as they first appear in the input report. Print the output in the format given below. Use double floating-point precision. Examples:
Input |
Output |
2014-Mar-02 11:33 http://softuni.bg 8.37725 2014-Mar-02 11:34 http://www.google.com 1.335 2014-Mar-03 21:03 http://softuni.bg 7.25 2014-Mar-03 22:00 http://www.google.com 2.44 2014-Mar-03 22:01 http://www.google.com 2.45 2014-Mar-03 22:01 http://www.google.com 2.77 |
http://softuni.bg -> 7.813625 http://www.google.com -> 2.24875 |
2014-Apr-01 02:01 http://softuni.bg 8.37725 2014-Apr-01 02:05 http://www.nakov.com 11.622 2014-Apr-01 02:06 http://softuni.bg 4.33 2014-Apr-01 02:11 http://www.google.com 1.94 2014-Apr-01 02:11 http://www.google.com 2.011 2014-Apr-01 02:12 http://www.google.com 4.882 2014-Apr-01 02:34 http://softuni.bg 4.885 2014-Apr-01 02:36 http://www.nakov.com 10.74 2014-Apr-01 02:36 http://www.nakov.com 11.75 2014-Apr-01 02:38 http://softuni.bg 3.886 2014-Apr-01 02:44 http://www.google.com 1.04 2014-Apr-01 02:48 http://www.google.com 1.4555 2014-Apr-01 02:55 http://www.google.com 1.977 |
http://softuni.bg -> 5.3695625 http://www.nakov.com -> 11.3706666666667 http://www.google.com -> 2.21758333333333 |
принципно ставаа, но трябва да набия още 1 ентер накрая.. а пък на теория не знаеш дали няма да има празен ред във входните данни
Присвояването в условието на конструкция не е добра идея, по-добре да се присвои преди цикъла и да се вземе наново в края му. В условието трябва да има булев израз, в случая има: 1) викане на метод и четене на данни от конзолата; 2) присвояване на прочетените данни в променлива; 3) проверка каква е стойността на тази променлива.
Ако присвоя стойността на променливата преди цикъла, какъв ще ми е break condition-a на while цикъла? Аз първо пробвах да сложа в условието на while-a само (console.readline() != ""), но тогава първия вход не го записва (аз добавям всеки ред в един списък). Дай идея как да го направим това с неизвестен брой редове вход.
Истината е, че съм виждал милиони пъти присвояване в while(), когато става въпрос за някакво четене на нещо, примерно от файл или друг стрийм. Защо смяташ, че не е добра идея в такива случаи?
RoYaL, защото е анти-КПК. Това, че се прави често, не значи, че е хубава практика. В джаваскрипт например, понеже може директно да бутнеш променлива в условието, нещата са малко по-чисти и понякога е удобно да се прави така. Но в езици като C#, Java не е много лицеприятно.
Решението е доста просто, с един добавен ред в края на цикъла, като условието е прост булев израз:
Едит: Да кажем, че присвояването в условието е приемливо; изябгва се и малко повторение на код. Все пак малко се влошава четимостта, а трябва да имаме предвид и че този код ще се чете от начинаещи, т.е. доста е вероятно за тях това да е объркващо. Като цяло колкото повече неща се случват на един ред, толкова по-вероятно е да се влоши четимостта.