6 svar
1152 visningar
ximon behöver inte mer hjälp
ximon 7 – Fd. Medlem
Postad: 19 feb 2021 12:06 Redigerad: 19 feb 2021 13:06

Amerikanen i bastun

Har kommit såhär långt med uppgiften men märker att C inte existerar, vad är det som jag har gjort fel med metoden? För jag antar att det har o göra med metoden, måste veta hur metoderna funkar så att detta blir rätt..

using System;

namespace Amerikanenibastun
{
    class Program
    {
        
        


        public static double FahrToCels(int fahr)                      //metod för att omvandla fahrenheit till celsius
        {
            double Cels = ((fahr - 32) * 5 / 9);
            return Cels;
        }

        public static void Main(string[] args)

        {
            
                        Console.Write("Enter a temprature    ");
            do
            {

                bool loop = true;
                do
                {
                    try
                    {
                        
                        int FH = int.Parse(Console.ReadLine());
                        double C = FahrToCels(FH);
                        loop = false;
                    }
                    catch (Exception felblevdet)
                    {
                        Console.Write("Please enter in whole numbers    ");
                    }

                } while (loop);


                if (C > 77) 
                {
                    Console.Write("It's way to hot in here, please lower the temp    ");
                }
                else if (C < 73)
                {
                    Console.Write("It's way to cold in here, please up the temp    ");
                }
                else if (C == 75)
                {
                    Console.Write("This is the perfect temp!!    ");
                }
                else
                {
                    Console.WriteLine("Not great not terrible");
                }

            } while (C != 75);

            Console.WriteLine();
            Console.WriteLine("Let's enjoy shall we!");
Laguna Online 30472
Postad: 19 feb 2021 13:57

C är deklarerad inuti try-blocket, och då finns den bara där. Deklarera den med

  double C;

på samma ställe som loop, och ta bort "double" inuti try-blocket.

Lindehaven 820 – Lärare
Postad: 19 feb 2021 13:57 Redigerad: 19 feb 2021 13:58

Deklarationen av C görs inne i kodblocket för try och är inte inom scope i det yttre kodblocket. Kan lösas så här:

        public static void Main(string[] args)

        {
            double C = 0;  // deklarera och initiera C här
            Console.Write("Enter a temprature    ");
            do
            {

                bool loop = true;
                do
                {
                    try
                    {
                        
                        int FH = int.Parse(Console.ReadLine());
                        C = FahrToCels(FH);
ximon 7 – Fd. Medlem
Postad: 19 feb 2021 15:02
Laguna skrev:

C är deklarerad inuti try-blocket, och då finns den bara där. Deklarera den med

  double C;

på samma ställe som loop, och ta bort "double" inuti try-blocket.

Okej så när den är i en try catch så blir den liksom lokal och inget utanför den kan se den deklareringen, lite som en klass? Försöker lista ut hur jag då skulle göra om jag vill göra en talslumpare om personen skriver in 0 fahrenheit.  

Laguna Online 30472
Postad: 19 feb 2021 15:18

Det är inte try-catch som är speciell, utan det gäller alla block (alltså kod omringad med fiskmåsar). En variabel deklarerad inuti ett block syns inte utanför. Om den har samma namn som en variabel utanför, så blir den yttre variabeln skuggad, så att man inte ser den inuti blocket.

ximon 7 – Fd. Medlem
Postad: 20 feb 2021 13:50
Lindehaven skrev:

Deklarationen av C görs inne i kodblocket för try och är inte inom scope i det yttre kodblocket. Kan lösas så här:

        public static void Main(string[] args)

        {
            double C = 0;  // deklarera och initiera C här
            Console.Write("Enter a temprature    ");
            do
            {

                bool loop = true;
                do
                {
                    try
                    {
                        
                        int FH = int.Parse(Console.ReadLine());
                        C = FahrToCels(FH);

Okeeej då förstår jag, då är det ju bättre att göra det utanför eller att skapa en metod för sånt för då kan man ju kalla metoden i flera block!?

Lindehaven 820 – Lärare
Postad: 23 feb 2021 20:21

Generellt är det bättre att skapa flera korta funktioner som gör varsin avgränsade "grej" än att skapa en lång funktion som gör "alla grejer". Korta funktioner med få argument och få returvärden är enklare att testa och återanvända. Ännu enklare blir det om man samlar inmatning och utmatning i så få funktioner som möjligt så att man får mindre jobb med att mocka dem för sina automat-tester.

Du kan exempelvis skapa en funktion som hanterar inmatning av hela grader Fahrenheit. Du har redan en funktion som omvandlar Fahrenheit till Celsius. Du kan slutligen skapa en funktion som bedömer om temperaturen är lagom (med temperaturer för minimum, lagom och maximum som argument). Sedan kan du anropa dem efter varandra i main- funktionen.

Svara
Close