Do while loop (amerikanen i bastun)

Permalänk

Do while loop (amerikanen i bastun)

Hej! Jag har fastnat på den kända amerikanen i bastun i programmering 1, men jag hittade ingen tråd som tog upp samma problem som jag har tyvärr.
Jag gjorde uppgiften först på E nivå utan problem(då använde jag endast int ej double i uträkningarna/koden). Men när jag skulle lägga till att konvertera från Int till double i min metod blev det problem i min do while loop som funkade innan. För att kolla så att min metod funkade och att konverteringen blev rätt skrev jag in en tillfällig Console.WriteLine(grader); i koden och den skriver ut rätt temperatur i Celsius.
Men do while loopen skriver inte längre ut rätt svar i konsolfönstret. Skriver jag tex in 167 F så är det 75 grader celcius. Men den skriver då inte ut svaret att temperaturen är ”perfekt” i bastun. Utan den skriver att det är för varmt i bastun. Hoppas att någon kanske kan se vart jag har gjort fel!
(Jag hoppas också att koden hamnar rätt i inlägget den här gången (sådär fint utskjuten till höger), om inte så skulle jag gärna vilja veta hur man gör det till nästa gång!) Tusen tack på förhand!

namespace Bastun { class Program { public static double FahrToCels(int fahr) //metod för att räkna ut Fahrenheit till Celcius { double cels; //skapar en double med namnet cels (celsius) double fahrdouble = Convert.ToDouble(fahr); //konvertera int(fahr) till double cels = ((fahrdouble - 32) * 5) / 9; //räknar om värdet på cel från Fahrenheit till Celcius return cels; //metoden returnerar datan } static void Main(string[] args) { Console.WriteLine("Please enter the desired degrees in the sauna: "); //frågar användaren efter önskade grader int fahr = int.Parse(Console.ReadLine()); //användaren skriven in sitt svar och det görs till en int på en gång int grader = (int)FahrToCels(fahr); //använder metoden jag skapade för att räkna ut celcius från användarens svar Console.WriteLine(grader); do //skapar en do while loop { if (grader < 73) { Console.WriteLine("It's too cold in the sauna, please raise the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); grader = (int)FahrToCels(fahr); } else { Console.WriteLine("It's too hot in the sauna, please lower the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); grader = (int)FahrToCels(fahr); } } while (grader < 73 || grader > 77); //avslutar do while loop if (grader == 75) { Console.WriteLine("The temperature in the sauna is perfect!"); } else //gäller om temperaturen är från 73 till 77 grader, men inte 75. { Console.WriteLine("The temperature in the sauna is acceptable."); } } } }

Permalänk
Medlem

Inne i din do-while loop så skriver du alltid ut att det är för varmt om inte temperaturen ligger under 73 grader.
Istället för bara en "else" inne i loopen så borde det vara en "else if()". Vilket villkor det ska vara där får du lista ut själv

Permalänk
Medlem
Skrivet av Hubbiedub:

Hej! Jag har fastnat på den kända amerikanen i bastun i programmering 1, men jag hittade ingen tråd som tog upp samma problem som jag har tyvärr.
Jag gjorde uppgiften först på E nivå utan problem(då använde jag endast int ej double i uträkningarna/koden). Men när jag skulle lägga till att konvertera från Int till double i min metod blev det problem i min do while loop som funkade innan. För att kolla så att min metod funkade och att konverteringen blev rätt skrev jag in en tillfällig Console.WriteLine(grader); i koden och den skriver ut rätt temperatur i Celsius.
Men do while loopen skriver inte längre ut rätt svar i konsolfönstret. Skriver jag tex in 167 F så är det 75 grader celcius. Men den skriver då inte ut svaret att temperaturen är ”perfekt” i bastun. Utan den skriver att det är för varmt i bastun. Hoppas att någon kanske kan se vart jag har gjort fel!
(Jag hoppas också att koden hamnar rätt i inlägget den här gången (sådär fint utskjuten till höger), om inte så skulle jag gärna vilja veta hur man gör det till nästa gång!) Tusen tack på förhand!

namespace Bastun
{
class Program
{
public static double FahrToCels(int fahr) //metod för att räkna ut Fahrenheit till Celcius
{
double cels; //skapar en double med namnet cels (celsius)
double fahrdouble = Convert.ToDouble(fahr); //konvertera int(fahr) till double
cels = ((fahrdouble - 32) * 5) / 9; //räknar om värdet på cel från Fahrenheit till Celcius
return cels; //metoden returnerar datan
}

static void Main(string[] args)
{
Console.WriteLine("Please enter the desired degrees in the sauna: "); //frågar användaren efter önskade grader
int fahr = int.Parse(Console.ReadLine()); //användaren skriven in sitt svar och det görs till en int på en gång
int grader = (int)FahrToCels(fahr); //använder metoden jag skapade för att räkna ut celcius från användarens svar

Console.WriteLine(grader);

do //skapar en do while loop
{
if (grader < 73)
{
Console.WriteLine("It's too cold in the sauna, please raise the temperature. Enter new desired degrees: ");
fahr = int.Parse(Console.ReadLine());
grader = (int)FahrToCels(fahr);
}
else
{
Console.WriteLine("It's too hot in the sauna, please lower the temperature. Enter new desired degrees: ");
fahr = int.Parse(Console.ReadLine());
grader = (int)FahrToCels(fahr);
}
}
while (grader < 73 || grader > 77); //avslutar do while loop

if (grader == 75)
{
Console.WriteLine("The temperature in the sauna is perfect!");
}
else //gäller om temperaturen är från 73 till 77 grader, men inte 75.
{
Console.WriteLine("The temperature in the sauna is acceptable.");
}
}
}
}

För att få koden rätt formaterad lägger du den i [code]-taggar en "code" före och en "/code" efter fast i [].
Din kod:

namespace Bastun { class Program { public static double FahrToCels(int fahr) //metod för att räkna ut Fahrenheit till Celcius { double cels; //skapar en double med namnet cels (celsius) double fahrdouble = Convert.ToDouble(fahr); //konvertera int(fahr) till double cels = ((fahrdouble - 32) * 5) / 9; //räknar om värdet på cel från Fahrenheit till Celcius return cels; //metoden returnerar datan } static void Main(string[] args) { Console.WriteLine("Please enter the desired degrees in the sauna: "); //frågar användaren efter önskade grader int fahr = int.Parse(Console.ReadLine()); //användaren skriven in sitt svar och det görs till en int på en gång int grader = (int)FahrToCels(fahr); //använder metoden jag skapade för att räkna ut celcius från användarens svar Console.WriteLine(grader); do //skapar en do while loop { if (grader < 73) { Console.WriteLine("It's too cold in the sauna, please raise the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); grader = (int)FahrToCels(fahr); } else { Console.WriteLine("It's too hot in the sauna, please lower the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); grader = (int)FahrToCels(fahr); } } while (grader < 73 || grader > 77); //avslutar do while loop if (grader == 75) { Console.WriteLine("The temperature in the sauna is perfect!"); } else //gäller om temperaturen är från 73 till 77 grader, men inte 75. { Console.WriteLine("The temperature in the sauna is acceptable."); } } } }

Visa signatur

FormD T1 || i9 10850K || MSI MEG Z490i UNIFY || Nvidia RTX3080FE || 32GB G.SKILL Trident Z Neo 3600MHz CL16 || WD SN550 1TB && Kingston Fury Renegade 2TB|| Corsair SF750 Platinum
Dell S2721DGFA|HP Omen 34C
BenQ W1300 | Yamaha RX-A830 | Playstation 3

Permalänk
Skrivet av Erik_T:

Inne i din do-while loop så skriver du alltid ut att det är för varmt om inte temperaturen ligger under 73 grader.
Istället för bara en "else" inne i loopen så borde det vara en "else if()". Vilket villkor det ska vara där får du lista ut själv

Hej! Tack för svar! Jag provade att skriva på den raden: else if (grader > 77);
men det ger mig samma felaktiga resultat (att det är för varmt när graderna är 75C). Anledningen att jag inte skrev med det från början är eftersom när jag avlutar do while loopen har skrivit: while (grader < 73 || grader > 77;
Och därför om jag skriver in 167F som blir 75C borde ju den ju gå vidare förbi do while loopen och skriva att temperaturen är perfekt, som det står i if-satsen nedanför loopen. Allt det fungerade jättebra innan jag konverterade int till double i min metod. Koden skriver ut rätt grader i Celsius men ger fel svar om värmen. :/

Permalänk
Skrivet av ChipZ:

För att få koden rätt formaterad lägger du den i [code]-taggar en "code" före och en "/code" efter fast i [].
Din kod:

namespace Bastun { class Program { public static double FahrToCels(int fahr) //metod för att räkna ut Fahrenheit till Celcius { double cels; //skapar en double med namnet cels (celsius) double fahrdouble = Convert.ToDouble(fahr); //konvertera int(fahr) till double cels = ((fahrdouble - 32) * 5) / 9; //räknar om värdet på cel från Fahrenheit till Celcius return cels; //metoden returnerar datan } static void Main(string[] args) { Console.WriteLine("Please enter the desired degrees in the sauna: "); //frågar användaren efter önskade grader int fahr = int.Parse(Console.ReadLine()); //användaren skriven in sitt svar och det görs till en int på en gång int grader = (int)FahrToCels(fahr); //använder metoden jag skapade för att räkna ut celcius från användarens svar Console.WriteLine(grader); do //skapar en do while loop { if (grader < 73) { Console.WriteLine("It's too cold in the sauna, please raise the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); grader = (int)FahrToCels(fahr); } else { Console.WriteLine("It's too hot in the sauna, please lower the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); grader = (int)FahrToCels(fahr); } } while (grader < 73 || grader > 77); //avslutar do while loop if (grader == 75) { Console.WriteLine("The temperature in the sauna is perfect!"); } else //gäller om temperaturen är från 73 till 77 grader, men inte 75. { Console.WriteLine("The temperature in the sauna is acceptable."); } } } }

Tusen tack! Detta ska jag spara!

Permalänk

Jag har också stött på problemet att den säger att denna bit av kod är fel, det står "Input string was not in a correct format" och jag haaaatar den texten haha.

else { Console.WriteLine("It's too hot in the sauna, please lower the temperature. Enter new desired degrees: "); fahr = int.Parse(Console.ReadLine()); //det är denna rad jag får felmeddelande om! grader = (int)FahrToCels(fahr); }

Den säger dock endast det meddelandet om kodbiten som är under "else" i min do while loop. Den säger inte att något är fel i den första "if (grader < 73)" ovanför fast det står exakt samma kod där??

Permalänk
Medlem
Skrivet av Hubbiedub:

Jag provade att skriva på den raden: else if (grader > 77);

Om du sätter ett ; i slutet av raden så avslutar du if-satsen. D.v.s.:

if (grader == 75); // Kollar om grader är lika med 75 och gör sen ingenting { // Början på ett nytt block som inte hänger ihop med if-satsen. // Körs oavsett vad grader är. Console.WriteLine("The temperature in the sauna is perfect!"); }

Skrivet av Hubbiedub:

Anledningen att jag inte skrev med det från början är eftersom när jag avlutar do while loopen har skrivit: while (grader < 73 || grader > 77;

En do-while loop testar villkoret i slutet av en iteration medan en while-loop testar det i början. En do-while loop kommer alltså alltid att köra koden minst en gång, medan en while-loop inte körs alls om villkoret är falskt från början.

Skrivet av Hubbiedub:

Jag har också stött på problemet att den säger att denna bit av kod är fel, det står "Input string was not in a correct format" och jag haaaatar den texten haha.

Det betyder att vad Console.ReadLine() returnerande inte är något som kan tolkas som ett tal. Varför vet jag inte, du kanske matar in talet fel?

Men du gör samma fel som många nybörjare gör, vilket är att ha inläsning på flera olika ställen. Just nu läser du in grader både före loopen och på två ställen inne i loopen, men det är onödigt komplicerat och det räcker att ha inläsning på ett enda ställe. Det finns ingen anledning att hantera den första inläsning som ett specialfall, tänk istället på det som en uppgift du vill upprepa tills rätt värde uppnås: läs in grader, skriv ut meddelande om det är utanför gränserna.

Permalänk
Skrivet av perost:

Om du sätter ett ; i slutet av raden så avslutar du if-satsen. D.v.s.:

if (grader == 75); // Kollar om grader är lika med 75 och gör sen ingenting { // Början på ett nytt block som inte hänger ihop med if-satsen. // Körs oavsett vad grader är. Console.WriteLine("The temperature in the sauna is perfect!"); }

En do-while loop testar villkoret i slutet av en iteration medan en while-loop testar det i början. En do-while loop kommer alltså alltid att köra koden minst en gång, medan en while-loop inte körs alls om villkoret är falskt från början.
Det betyder att vad Console.ReadLine() returnerande inte är något som kan tolkas som ett tal. Varför vet jag inte, du kanske matar in talet fel?

Men du gör samma fel som många nybörjare gör, vilket är att ha inläsning på flera olika ställen. Just nu läser du in grader både före loopen och på två ställen inne i loopen, men det är onödigt komplicerat och det räcker att ha inläsning på ett enda ställe. Det finns ingen anledning att hantera den första inläsning som ett specialfall, tänk istället på det som en uppgift du vill upprepa tills rätt värde uppnås: läs in grader, skriv ut meddelande om det är utanför gränserna.

Men så dum jag är haha, tog bort ";" i slutet och så försvann båda problemen! Tack så jättemycket för ditt superbra svar!
Sen med att jag har flera ställen för användaren att skriva in svar var för att det var det sättet jag visste jag kunde göra. går det att göra det bättre men ändå behålla do while-loopen och if-satsen inuti? (de ska båda vara med i koden enligt instruktionerna till uppgiften)

Permalänk
Medlem
Skrivet av Hubbiedub:

Sen med att jag har flera ställen för användaren att skriva in svar var för att det var det sättet jag visste jag kunde göra. går det att göra det bättre men ändå behålla do while-loopen och if-satsen inuti? (de ska båda vara med i koden enligt instruktionerna till uppgiften)

Gör inläsningen i början av loopen istället, så att den körs varje gång innan du kontrollerar värdet som lästes in. En liten fälla är bara att du fortfarande måste deklarera grader-variabeln utanför loopen för att kunna använda den i loop-villkoret (men du behöver inte ge den något värde förrän inne i loopen).

Permalänk
Skrivet av perost:

Gör inläsningen i början av loopen istället, så att den körs varje gång innan du kontrollerar värdet som lästes in. En liten fälla är bara att du fortfarande måste deklarera grader-variabeln utanför loopen för att kunna använda den i loop-villkoret (men du behöver inte ge den något värde förrän inne i loopen).

Det där gick totalt över mitt huvud haha! Jag är inte jättebra på alla termer än. Kanske är lite över min nivå i programmering?

Jag har iaf gått vidare till en svårare del av uppgiften. Det är att man ska lägga till try catch, som jag har ett par funderingar över. Så här står det i uppgiften: ”Ett vanligt fel man gör när man jobbar med try och catch är att man lägger för mycket kod i try-blocket. Egentligen ska bara själva typ-omvandlingen ligga här”. Därför har jag i try endast skrivit med konverteringen från metoden FahrToCels. Detta är koden jag har skrivit:

try //kod där fel kan hända { double fahrdouble = Convert.ToDouble(fahr); } catch //ska hantera eventuella fel (exceptions) { Console.WriteLine("Error: you may only write your answer in numbers."); //felmeddelande till användaren continue; //ska hoppa över resten av loopen }

I lärobokens exempel och i videorna vi har så stängs programmet ner efter att error meddelandet skrivits ut och användaren får börja om. Så det är det jag har försökt att gjort. Men konsolrutan stängs ner innan man hinner läsa texten, jag har provat att lägga till en Console.ReadKey(); men det hjälper inte. Jag har provat att lägga in try catch koden både i och utanför do while-loopen. Jag har provat att skriva den i en bool loop, men det funkar inte heller. Hur kan jag göra för att rutan inte ska stängas ner innan man hinner läsa texten?
Den andra frågan jag har är om det är möjligt att göra så att try catch inte stänger ner programmet efter felmeddelandet, så att användaren kan fortsätta där den var? Det är inget som tas upp i läromaterialet. Men det känns ju som en bättre lösning om det går, och inte är för svårt för programmering 1 dvs.

Permalänk
Medlem
Skrivet av Hubbiedub:

Det där gick totalt över mitt huvud haha! Jag är inte jättebra på alla termer än. Kanske är lite över min nivå i programmering?

Nej, det handlar bara om att strukturera din kod på ett enklare sätt. Din nuvarande struktur är onödigt komplicerad och orsakar problem för dig nu när du försöker gå vidare och lägga till mer felhantering. Istället för att göra så här:

läs in grader { om för kallt: skriv ut meddelande läs in grader om för varmt: skriv ut meddelande läs in grader } upprepa tills grader är mellan 73 och 77

så bör du göra detta:

{ läs in grader om för kallt: skriv ut meddelande om för varmt: skriv ut meddelande } upprepa tills grader är mellan 73 och 77

För att det ska fungera så måste du dela på deklareringen och initialiseringen av grader:

int grader = (int)FahrToCels(fahr); // deklarering och initalisering samtidigt int grader; // deklarering grader = (int)FahrToCels(fahr); // initialisering

Att initialisera variabler på samma rad som de deklareras på är bra om det går. Men i det här fallet så måste vi dela på det eftersom grader måste deklareras utanför loopen för att vara synlig i loop-villkoret, men själva inläsningen av värdet sker inne i loopen.

Varför ditt program avslutas vet jag inte, men det är inte p.g.a. try-catch-satsen i sig utan snarare för att du gör något som får din loop att avslutas.

Permalänk
Skrivet av perost:

Nej, det handlar bara om att strukturera din kod på ett enklare sätt. Din nuvarande struktur är onödigt komplicerad och orsakar problem för dig nu när du försöker gå vidare och lägga till mer felhantering. Istället för att göra så här:

läs in grader { om för kallt: skriv ut meddelande läs in grader om för varmt: skriv ut meddelande läs in grader } upprepa tills grader är mellan 73 och 77

så bör du göra detta:

{ läs in grader om för kallt: skriv ut meddelande om för varmt: skriv ut meddelande } upprepa tills grader är mellan 73 och 77

För att det ska fungera så måste du dela på deklareringen och initialiseringen av grader:

int grader = (int)FahrToCels(fahr); // deklarering och initalisering samtidigt int grader; // deklarering grader = (int)FahrToCels(fahr); // initialisering

Att initialisera variabler på samma rad som de deklareras på är bra om det går. Men i det här fallet så måste vi dela på det eftersom grader måste deklareras utanför loopen för att vara synlig i loop-villkoret, men själva inläsningen av värdet sker inne i loopen.

Varför ditt program avslutas vet jag inte, men det är inte p.g.a. try-catch-satsen i sig utan snarare för att du gör något som får din loop att avslutas.

Okej, jag förstår lite mer! Så i do while loopen ska jag alltså inte direkt be användaren att skriva in ett nytt svar, men om jag tar bort den delen, hur och vart ska användaren få göra det? "Skickas" dom tillbaka till första frågan i koden då? Jag förstår inte vart användaren ska få möjlighet att skriva in ett nytt svar?

Permalänk
Medlem
Skrivet av Hubbiedub:

Okej, jag förstår lite mer! Så i do while loopen ska jag alltså inte direkt be användaren att skriva in ett nytt svar, men om jag tar bort den delen, hur och vart ska användaren få göra det? "Skickas" dom tillbaka till första frågan i koden då? Jag förstår inte vart användaren ska få möjlighet att skriva in ett nytt svar?

Du läser in i början av loopen, så varje gång loopen börjar om så får användaren mata in ett nytt svar.

Permalänk
Skrivet av perost:

Du läser in i början av loopen, så varje gång loopen börjar om så får användaren mata in ett nytt svar.

Alltså tusen tack att du tog dig tiden att förklara detta! Jag har inte haft en tanke tidigare på att man göra på detta sett, så mycket enklare!
Jag har gjort om koden nu och allt fungerar som det ska, förutom try catch. Skriver jag in ex ordet Hej i konsolfönstret stänger den fortfarande ner allt utan att man kan läsa felmeddelandet. Jag har försökt att letat andra källor än kursmaterialet för att lösa det men lyckas inte, än iaf. Om du (eller någon annan) ser något fel i min try catch) tar jag gärna emot hjälp om vad som är fel och hur jag kan fixa det!

namespace Bastun { class Program { public static double FahrToCels(int fahr) //metod för att räkna ut Fahrenheit till Celcius { double cels; //skapar en double med namnet cels (celsius) double fahrdouble = Convert.ToDouble(fahr); //konvertera int(fahr) till double cels = ((fahrdouble - 32) * 5) / 9; //räknar om värdet på cel från Fahrenheit till Celcius Math.Round(cels, 0, MidpointRounding.AwayFromZero); //avrundar talet till närmsta heltal (som inte är noll) return cels; //metoden returnerar datan } static void Main(string[] args) { int grader = 0; do //skapar en do while loop { Console.WriteLine("Please enter the desired degrees in the sauna: "); //frågar användaren efter önskade grader int fahr = int.Parse(Console.ReadLine()); //användaren skriven in sitt svar och det görs till en int på en gång grader = (int)FahrToCels(fahr); //använder metoden jag skapade för att räkna ut celcius från användarens svar try //kod där fel kan hända { double fahrdouble = Convert.ToDouble(fahr); //konvertering inuti metoden där det kan bli fel } catch //ska hantera eventuella fel (exceptions) { Console.WriteLine("Error: you may only write your answer in numbers."); //felmeddelande till användaren continue; //ska hoppa över resten av loopen } if (grader < 73) { Console.WriteLine("It's too cold in the sauna, please raise the temperature."); } else if (grader > 77) { Console.WriteLine("It's too hot in the sauna, lower the temperature."); } } while (grader < 73 || grader > 77); //avslutar do while loop if (grader == 75) //om grader är exakt 75 { Console.WriteLine("The temperature in the sauna is perfect!"); } else //gäller om temperaturen är från 73 till 77 grader, men inte 75. { Console.WriteLine("The temperature in the sauna is acceptable."); } } } }

Permalänk
Medlem

@Hubbiedub: Problemet är att det är int.Parse som kommer kasta en exception om du matar in något som inte är ett tal, och den ligger utanför try-catch-satsen. Din Convert.ToDouble kommer däremot alltid att lyckas eftersom den bara konverterar en int till double.

Permalänk
Skrivet av perost:

@Hubbiedub: Problemet är att det är int.Parse som kommer kasta en exception om du matar in något som inte är ett tal, och den ligger utanför try-catch-satsen. Din Convert.ToDouble kommer däremot alltid att lyckas eftersom den bara konverterar en int till double.

Jag har provat att lagt in den raden istället i min try, alltså: int fahr = int.Parse(Console.ReadLine());
(Visst är det den du menar?)
Men visual studios säger då att "A local parameter named *fahr* cannot be declared in this scope because that name is used in an enclosing local scope to define a local parameter".

Permalänk
Medlem
Skrivet av Hubbiedub:

Jag har provat att lagt in den raden istället i min try, alltså: int fahr = int.Parse(Console.ReadLine());
(Visst är det den du menar?)
Men visual studios säger då att "A local parameter named *fahr* cannot be declared in this scope because that name is used in an enclosing local scope to define a local parameter".

Felmeddelandet säger att du redan deklarerat fahr i ett omslutande block, du har troligtvis kvar den gamla deklarationen också. Du vill inte deklarera fahr inne i try-blocket, bara tilldela den.

Permalänk
Skrivet av perost:

Felmeddelandet säger att du redan deklarerat fahr i ett omslutande block, du har troligtvis kvar den gamla deklarationen också. Du vill inte deklarera fahr inne i try-blocket, bara tilldela den.

Jaha okej! Trodde att man var tvungen att skriva hela raden. Jag tog bort 'int' i början och får inte längre upp den texten. Konsolfönstret stänger dock fortfarande ner sig. Visual studios markerar raden i början av do while loopen int fahr = int.Parse(Console.ReadLine());
och säger att "Input string was not in a correct format", vilket jag förstår i och med att jag skriver in ordet hej istället för siffror. Men varför går den inte vidare till min try catch och skriver ut error texten jag har angivit där?

Permalänk
Medlem

@Hubbiedub: Du måste lägga ditt anrop till int.Parse inne i try-blocket, d.v.s.:

try { // Kod som kan kasta exceptions. } catch { // Kod som körs om ett exception kastas. }

Om du har kod som kastar ett exception som inte är omslutet av ett try-block så kastas det vidare till den som anropade koden, och om ett exception når Main utan att hanteras så dödas programmet. Men det kanske är lite överkurs, det viktiga här är att bara exceptions som kastats i try-blocket kommer fångas av det tillhörande catch-blocket.

Permalänk
Skrivet av perost:

@Hubbiedub: Du måste lägga ditt anrop till int.Parse inne i try-blocket, d.v.s.:

try { // Kod som kan kasta exceptions. } catch { // Kod som körs om ett exception kastas. }

Om du har kod som kastar ett exception som inte är omslutet av ett try-block så kastas det vidare till den som anropade koden, och om ett exception når Main utan att hanteras så dödas programmet. Men det kanske är lite överkurs, det viktiga här är att bara exceptions som kastats i try-blocket kommer fångas av det tillhörande catch-blocket.

Jahaaaaa! Jag trodde att man först skrev kod som vanligt, och att man sedan i try-blocket la in kopierat den kod som kan bli fel, så att koden liksom låg på två ställen. Jag hade inte förstått av kurslitteraturen att koden bara ska ligga på ett ställe (i try blocket i detta fall), och skrev den därför dubbelt kan man säga. Jag har flyttat koden till try-blocket nu så att det inte står dubbelt och allt fungerar! jättebra förklaring, tack!