7 svar
466 visningar
MayaWingårdh 47 – Fd. Medlem
Postad: 16 apr 2021 12:37

Hjälp med Try Catch i programmering 1!

Min uppgift (som verkar vara en klassiker) är att en amerikan ska kunna mata in en bastu temperatur i F som programmet sedan ska omvandla till C. Den optimala temperaturen är 73-78 grader. Han ska också kunna mata in 0 och få en temperatur slumpad. 

 

Jag har problem med try/catch. Hur får jag programmet att fråga honom igen om temperaturen efter felmeddelandet? Behöver jag göra en egen loop till try/catch? 

Tar gärna feedback på resterande av koden också. Har bara programmerat i några veckor på distans så tar all hjälp jag kan få!

 

[code]

using System;

namespace bastuett
{
class Program
{

//metod för omvandling av F till C
public static double FahrenheitToCelsius(int fahr)

{
double temp = (double)fahr;
return (temp - 32.0) * 5.0 / 9.0;

}
//Metod för slumpat tal
public static int FahrenheitToCelsius ()
{

Random randomaren = new Random();
int slumpTal = randomaren.Next(72, 78);
return slumpTal;
}


static void Main(string[] args)
{

 

double celcius = 0;
int fahrenheit = 0;

//start av programmet, fråga+svar
Console.WriteLine("Välkommen till bastun");

do
{
Console.WriteLine("Ange antal grader. Vill du att det ställs in automatiskt skriv noll (0).");

try
{
string svar = Console.ReadLine();
fahrenheit = int.Parse(svar);
}

catch (Exception ex)
{
Console.WriteLine(ex.Message); //hur får jag den att fortsätta köra programmet?

}


celcius = FahrenheitToCelsius(fahrenheit);
celcius = Math.Round(celcius,0);


if (fahrenheit == 0)
celcius = FahrenheitToCelsius();


if (celcius < 73)

{
Console.WriteLine("Nu är det " + celcius + "C varmt. Du behöver höja temperaturen");
}

else if (celcius > 77)

{
Console.WriteLine("Nu är det " + celcius + "C varmt. Du behöver sänka temperaturen");
}

}

//Loop avslutas när:
while (celcius > 77 || celcius < 73);

Console.WriteLine("Nu är det " + celcius + "C och det är lagom varmt!");
Console.ReadKey();

}

 

}

 

[code]

Laguna Online 30484
Postad: 16 apr 2021 13:47

Om det du vill är att loopen ska börja om ifall man hamnar i catch, så kan du nog göra det med nyckelordet "continue". Det heter så i alla liknande språk, så det borde heta så i C# också.

MayaWingårdh 47 – Fd. Medlem
Postad: 16 apr 2021 22:42

Gud. Så simpelt och självklart egentligen. Haha! Tusen tack. Ser allt okej ut annars? 

Jag är en 32 åring små barns mamma utan erfarenhet som fått för mig att jag ska bli spelprogrammerare! Läser på distans på komvux nu för att kunna söka en utbildning till hösten. Men man får verkligen ingen hjälp alls. Så uppskattade detta väldigt mycket! Tack! 

Fermatrix 7841 – Fd. Medlem
Postad: 17 apr 2021 01:32

ett allmänt tips, indentera gärna din kod om du inte redan gör det. Det är mycket jobbigare att läsa koden annars. Sedan kan du trycka på knappen till höger om roten ur tecknet och bifoga din kod där så blir det ännu mer läsligt! :)

MayaWingårdh 47 – Fd. Medlem
Postad: 17 apr 2021 12:55
using System;

namespace bastuett
{
    class Program
    {

        //metod för omvandling av F till C
        public static double FahrenheitToCelsius(int fahr)
        {
            double temp = (double)fahr;
            return (temp - 32.0) * 5.0 / 9.0;
        }
        //Metod för slumpat tal
        public static int FahrenheitToCelsius ()
        {
            Random randomaren = new Random();
            int slumpTal = randomaren.Next(72, 78); 
            return slumpTal;
        }

        static void Main(string[] args)
        {
            double celcius = 0;
            int fahrenheit = 0;

            //start av programmet + fråga
            Console.WriteLine("Välkommen till bastun");

            do
            {  
               Console.WriteLine("Ange antal grader. Vill du att det ställs in automatiskt skriv noll (0).");

                //Felhantering + svar
                try
                {
                    string svar = Console.ReadLine();
                    fahrenheit = int.Parse(svar);
                    Console.WriteLine("\n");
                }

                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    continue;
                }

                celcius = FahrenheitToCelsius(fahrenheit);
                celcius = Math.Round(celcius,0);

                if (fahrenheit == 0)

                    celcius = FahrenheitToCelsius();
    
                if (celcius < 73)

                {
                    Console.WriteLine("Nu är det " + celcius + "C varmt. Du behöver höja temperaturen");
                }

                else if (celcius > 77)

                {
                    Console.WriteLine("Nu är det " + celcius + "C varmt. Du behöver sänka temperaturen");
                }
         
            }

            //Loop avslutas när:
            while (celcius > 77 || celcius < 73);

            Console.WriteLine("Nu är det " + celcius + "C och det är lagom varmt!");
            Console.ReadKey();
    
        }


    









    }
}

 

Snyggt! Tack. Så här ser min kod ut just nu. Några tankar?

Laguna Online 30484
Postad: 17 apr 2021 13:02

Det är snällt mot användaren om man talar om när nåt gick fel, typ "du matade inte in ett tal, försök igen". 

MayaWingårdh 47 – Fd. Medlem
Postad: 17 apr 2021 13:40

Borde jag skriva en text själv istället för det automatiska som kommer när jag skriver ex.Message? 

Laguna Online 30484
Postad: 17 apr 2021 14:33

Nej, det kanske duger.

Svara
Close