Нет доступа к назначению внутри catch try - PullRequest
0 голосов
/ 08 июля 2020

celsius и temperature в while не имеют доступа к celsius и temperature в try catch . Я попытался выполнить задание за пределами , попробуйте поймать , но это не помогает и не соответствует.

using System;

namespace Hermods
{
    class Program
    {
        // method for converting Fahrenheit to Celsius with decimals
        public static double FahrToCels(int Fahr)
        {
            double cels = (Fahr - 32) * 5 / 9d;
            return cels;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Hi! Which tempreture would you like to have? Choose in Fahrenheit:");
            int temprature;
            double celsius;
            try
            {
                temprature = Int32.Parse(Console.ReadLine());
                celsius = FahrToCels(temprature);
            }
            catch
            {
                Console.WriteLine("ERROR! Enter only number!");
            }
            

            // asking user to optimize the tempreture between 73-77C
            while (celsius < 73 || celsius > 77)
            {
                if (celsius < 73)
                {
                    Console.WriteLine("It is too cold. You have to pick a higher tempreture:");
                    celsius = FahrToCels(temprature);
                }
                else if (celsius > 77)
                {
                    Console.WriteLine("It is too hot! You have to pick a cooler tempreture:");
                    celsius = FahrToCels(temprature);
                }
            }

            Console.WriteLine(Math.Round(celsius, 1));

            Console.WriteLine("Press any key to continue:");
            Console.ReadKey();
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 08 июля 2020

вы не можете использовать их за пределами try-catch, потому что их значение может никогда не быть присвоено.

Просто укажите начальное значение:

public static double FahrToCels(int Fahr)
    {
        double cels = (Fahr - 32) * 5 / 9d;
        return cels;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Hi! Which tempreture would you like to have? Choose in Fahrenheit:");
        int temprature = 0;
        double celsius = 0;
        try
        {
            temprature = Int32.Parse(Console.ReadLine());
            celsius = FahrToCels(temprature);
        }
        catch
        {
            Console.WriteLine("ERROR! Enter only number!");
        }
        

        // asking user to optimize the tempreture between 73-77C
        while (celsius < 73 || celsius > 77)
        {
            if (celsius < 73)
            {
                Console.WriteLine("It is too cold. You have to pick a higher tempreture:");
                celsius = FahrToCels(temprature);
            }
            else if (celsius > 77)
            {
                Console.WriteLine("It is too hot! You have to pick a cooler tempreture:");
                celsius = FahrToCels(temprature);
            }
        }

        Console.WriteLine(Math.Round(celsius, 1));

        Console.WriteLine("Press any key to continue:");
        Console.ReadKey();
    }
}
0 голосов
/ 08 июля 2020

Ваша проблема в том, что любая переменная должна быть инициализирована перед ее чтением!

int temprature;
double celsius;
try
{
    temprature = Int32.Parse(Console.ReadLine());
    celsius = FahrToCels(temprature);
}
catch
{
    Console.WriteLine("ERROR! Enter only number!");
    // You catch the error and don't throw and exception, 
    // therefore it can happen that temprature and-or celsius is not initialized
}

Либо инициализируйте их перед блоком try

int temprature = 0;
double celsius = 0;

, либо выбросьте исключение из блока catch.

0 голосов
/ 08 июля 2020

замените вашу переменную на значения по умолчанию

int temprature = 0;
double celsius = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...