Loading...
rolendimion avatar rolendimion 33 Точки

[Homework] Programming Basics - Conditional Statements - Problem {8} - Digit as Word

Не мога да разбера какъв тип променлива да въведа за да  може switch/case да ми я приеме и в същото време да не ми дава грешки при дроби и текст?

Ето опита ми за решение:

http://pastebin.com/uLwT6pe7

 

Тагове:
0
Programming Basics 02/04/2015 13:00:23
rolendimion avatar rolendimion 33 Точки

Благодаря така вече работиlaughing

0
mihayloff14 avatar mihayloff14 824 Точки

Решението ти работи както трябва. Ако искаш да избегнеш exception-и, трябва да използваш Exception Handling. Това няма да ти е необходимо за този курс, но може да видиш как става номера от тук: ЛИНК

Ето пример за Exception Handling:

ЛИНК

0
quickben avatar quickben 966 Точки

Колега "мисля", че втория ти линк не е правилен пример за Exception Handling ;)

Най-малкото за да бъде обработено едно изключение би трябвало преди това да е хвърлено а никъде в кода не виждам Exception, просто е направено така, че ако не се въведе число от 0 до 9 или "парсването" не е успешно програмата да казва "not a digit" .

Реално това е една от малкото задачи в които найстина не е нужно да се ползва try-catch или поне аз така ги виждам нещата.

0
mihayloff14 avatar mihayloff14 824 Точки

Навярно си прав за Exception-ите.

Обаче знай, че нито една задача от курса C# Basics не изисква да се използва Exception Handling, тъй като този материал още не е взиман. Дори и на изпита въведените данни винаги ще са коректни и в необходимия формат.

Разбира се, нищо не пречи да модифицираш програмите си чрез добавяне на Exception Handling, стига да си достатъчно нахъсан. Няма нищо лошо ако си по-напред с материала. smile

0
quickben avatar quickben 966 Точки

Определено никоя задача не изисква обработване на изключения, но аз въпреки това си ги правя с тях :)

0
axl894 avatar axl894 38 Точки

Ето и моето решение: http://pastebin.com/VHXXu5mk

В случая си създавам една булева променлива, която проверява дали входа може да се преобразува в тип int. Ако условието е изпълнено, "парсвам" променливата d в dNumber и проверявам дали dNumber e между 0 и 9. Предполагам има и по-адекватно решение, но това мисля работи :)

1
Bobosam avatar Bobosam 185 Точки

Аз просто ползвам стринг и всичко заспива. Променяш си кода ето така :

string d = Console.ReadLine();

switch (d)

{

case "0":

и вече имаш адекватен отговор каквото и да получиш на входа.

5
Filkolev avatar Filkolev 4482 Точки

И аз я реших по същия начин - в суич-а задавам какво да се покаже като резултат ако стрингът е цифра, а пък по подразбиране (т.е. ако е въведено нещо различно) дава "not a digit". Така няма опасност от exceptions, защото няма парсване и потребителя може да си вкара всякакви глупости без програмата да гърми.

2
AsenT avatar AsenT 7 Точки

Правилно го каза: Използва се "string" и всичко заспива! Най-лесният вариант и обхваща всички изключения.

0
dim.dim avatar dim.dim 1 Точки

е да ето и моя код с tryparse и всичко работи НО

както и вие така и аз съм дал променлива от тип целочислени и като въведа -0,1 мии изписва зиру:), странно че не гърми-може би защото не го приема за число, но не изписва и нот  а дигит

като се опитам с флотинг променлива "switch(digit)" не ми приема digit

как да станеза да приеме числото -0,1 не за 0:)

 

Mod Edit: Нарушена т. 12 от правилата на форума!

 

 да може и без инт всичко да е стринг и с кавички по кейсовете, но ми стана странно по този начин защо не може с дробни

1
02/04/2015 12:58:14
crazy7 avatar crazy7 177 Точки

При TryParse, когато не успея да парсне чилсото към int връща default value, а именно 0.

Може да си решиш проблема с една проверка например:

if(digit.ToString() != value){
    Console.WriteLine("Not a Digit");
}
else{

    stwitch...

}

Може проверката да е по доста различни начини сещам се още и за:

if(value.Length != 1)

EDIT: Също така TryParse връща и стойност дали е успял да парсне и можеш да проверяваш нея, което може би е най-правилния начин, нещо такова:

bool hasConverted = int.TryParse(value, out digit);

if(hasConverted )

3
01/04/2015 23:09:13
DHristoskov avatar DHristoskov 211 Точки

Аз лично се сещам за още два варианта ,но единия не е коментиран и е по- интересен за това:

string [] toNinе = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}

правиш проверка дали числото е между 0 и 9 и ако е, печаташ toNine[num],където num е въведеното число.

и по този начин може да направиш редицата не до 9 а до 19 на пример

string [] toNineteen = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen","seventeen", "eighteen", "nineteen" };
              

2
01/04/2015 22:50:39
crazy7 avatar crazy7 177 Точки

По този начин няма да си реши проблема с 0.1 защото при парсване към инт пак ще стани 0 и ще му изведе нулевия елемнт от масива, а и отговаря на условието между 0 и 9.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.