使用Do-While循环尝试捕获

时间:2018-03-23 20:19:48

标签: c# try-catch do-while

我正在学习C#课程并完成第二项任务。我已经能够完成代码了。 我唯一不能编码的是如何使用以及在哪里使用Try&抓住。由于我是C#的新手,我不知道如何编写它。

我已经搜索过解决方案,但大多数都在Java中。

任务是美国人应该进入桑拿浴室,桑拿浴室只能显示摄氏度。 您输入华氏度,它将转换为摄氏度。 桑拿温度为73-77摄氏度。

这是我的代码:

public static int FahrToCel(int fahr)
    {
        int cel = (fahr - 32) * 5 / 9;
        return cel;
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("Skriv in Fahrenheit: ");
        int fahrenheit = int.Parse(Console.ReadLine());
        //Användaren skriver in ett värde som lagras i fahrenheit
        int celsius = FahrToCel(fahrenheit);
        /* I celsius finns nu antal grader omvandlat från fahrenheit till celsius. */

        /*Här får lowerTempLimit värdet 77 
         * &  upperTempLimit = 77 */
        int lowerTempLimit = 73;
        int upperTempLimit = 77;

        /* While-do loop som breaker efter en iteration.
        *If satserna skriver utvärmen i bastun och säger till om temperatur ska sänkas eller höjas beroende på temperaturn i celsius. 
        * Om temperaturn är mellan 73 - 77 grader, så har bastun godtyckligt bra temperatur */
        do
        {
            if (celsius < lowerTempLimit)
            {
                Console.WriteLine("Bastun är inte tillräckligt varmt. Värme i bastun {0}, skruva upp värmen", celsius);
            }
            else if (celsius > upperTempLimit)
            {
                Console.WriteLine("Bastun är för varmt. Värme i bastun {0}, skruva ner värmen", celsius);
            }
            else
            {
                Console.WriteLine("Bastun är tillräckligt varmt för att kunna basta. Värme i bastun {0}", celsius);
            }
        }
        while (celsius < lowerTempLimit || celsius > upperTempLimit);

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

4 个答案:

答案 0 :(得分:2)

function regreshText(){是一种顶级方法;它只能由操作系统调用。通常,顶级方法应该具有某种形式的异常处理。否则,代码中发生的任何异常都会传播到操作系统本身,这通常不会产生最友好的UI。

将顶级异常处理添加到控制台应用程序相对容易。

var var_all_names = $('#myTable td').children('select.allNames');

这是你能做的最基本的事情。您也可以考虑写入事件日志或应用程序调试日志,或者如果用户可能能够理解它,则提供其他信息。

此外,在某些情况下,您的代码可能会抛出异常而您希望处理它,即不仅仅是退出应用程序。在这些情况下,您还应该使用try块包装特定的风险区域。

现在在你的情况下,实际上很少有代码可以抛出异常(除了灾难性的东西,比如O / S耗尽内存或类似的东西)。唯一的确是

Main

你可以做到

public static void Main(string[] args)
{
    try
    {
        //Put all of your code here
    }
    catch (System.Exception ex)
    {
        Console.WriteLine("A problem has occurred and the application will now exit. Details: {0}", ex.Message);
    }
}

但你可以通过调用 int fahrenheit = int.Parse(Console.ReadLine()); 来轻松替换它,这可以避免异常的可能性。这比将 //Don't do this while (true) { try { int fahrenheit = int.Parse(Console.ReadLine()); break; } catch (FormatException ex) { Console.WriteLine("Nummer nicht gut!!!") } } 包装在自己的try块中更好;一个try块在这里会有点过分,并且可能会影响性能,这可能是一个常见的用例(用户不小心输入了非数字字符串)。

TryParse

如果您决定使用try / catch而不是TryParse,请注意捕获Parse比抓住 int fahrenheit; while (true) { if (int.TryParse(Console.ReadLine(), out fahrenheit)) break; Console.WriteLine("Achtung! Nummer kaput!"); } 更好,因为您只想处理格式异常。另请参阅Why catch(Exception) is bad

答案 1 :(得分:0)

try-catch块用于捕获和处理异常。例如,您要求用户输入数字并输入字母。如果没有try-catch,当您尝试解析数字的输入,并且解析器遇到非数字时,它将停止并抛出异常。 try-catch允许程序拦截异常,优雅地处理它,并继续执行。 try块保存要尝试的代码,例如解析数字,catch块保存代码,以便在失败时执行操作。

答案 2 :(得分:0)

try-catch用于捕获代码中的异常并让您处理它(希望优雅地),而不仅仅是崩溃程序。 当用户输入数值时,我会有一个try-catch。当用户输入&#34; a&#34;你尝试解析一个数字?我已将它添加到您的下面,例如:

GET index/type/_search
{
  "query": {
    "bool":{
      "must":[ 
        {
          "multi_match" : {
            "query":    "dinner sydney", 
            "fields": [ "title^3", "description" ],
            "operator":   "and"
          }
        },{
          "match": { "publishStatus": "PUBLISHED"}
        }
      ]
    }
  }
}

PS:public static void Main(string[] args) { Console.WriteLine("Skriv in Fahrenheit: "); try { int fahrenheit = int.Parse(Console.ReadLine()); } catch(Exception e) { //Do error handling i.e. prompt user for a valid number } //Användaren skriver in ett värde som lagras i fahrenheit int celsius = FahrToCel(fahrenheit); /* I celsius finns nu antal grader omvandlat från fahrenheit till celsius. */ /*Här får lowerTempLimit värdet 77 * & upperTempLimit = 77 */ int lowerTempLimit = 73; int upperTempLimit = 77; /* While-do loop som breaker efter en iteration. *If satserna skriver utvärmen i bastun och säger till om temperatur ska sänkas eller höjas beroende på temperaturn i celsius. * Om temperaturn är mellan 73 - 77 grader, så har bastun godtyckligt bra temperatur */ do { if (celsius < lowerTempLimit) { Console.WriteLine("Bastun är inte tillräckligt varmt. Värme i bastun {0}, skruva upp värmen", celsius); } else if (celsius > upperTempLimit) { Console.WriteLine("Bastun är för varmt. Värme i bastun {0}, skruva ner värmen", celsius); } else { Console.WriteLine("Bastun är tillräckligt varmt för att kunna basta. Värme i bastun {0}", celsius); } } while (celsius < lowerTempLimit || celsius > upperTempLimit); Console.Write("Press any key to continue . . . "); Console.ReadKey(); } 是异常的最高形式,将捕获所有异常。在你的情况下,Exception就足够了。

答案 3 :(得分:0)

感谢大家的帮助,我真的很感激。

在我的情况下,我将使用下面的代码,因为我的老师在谈论Try-Catch代码。

            while (true)
            {
                try
                {
                    fahrenheit = int.Parse(Console.ReadLine());
                    break;
                }
                catch (FormatException ex)
                {
                    Console.WriteLine("Endast heltal kan matas in, försök igen!");
                    Console.WriteLine("\nSkriv in Fahrenheit grader: ");
                }
            }

这是我的最终代码:

public static int FahrToCel(int fahr)
    {
        int cel = (fahr - 32) * 5 / 9;
        return cel;
    }

    public static void Main(string[] args)
    {
        int startTempLimit = 0;
        int lowerTempLimit = 73;
        int upperTempLimit = 77;
        int celsius;
        int fahrenheit;

        do
        {
            Console.WriteLine("Skriv in Fahrenheit grader: ");
            while (true)
            {
                try
                {
                    fahrenheit = int.Parse(Console.ReadLine());
                    break;
                }
                catch (FormatException ex)
                {
                    Console.WriteLine("Endast heltal kan matas in, försök igen!");
                    Console.WriteLine("\nSkriv in Fahrenheit grader: ");
                }
            }
            celsius = FahrToCel(fahrenheit);

            if (celsius < startTempLimit)
            {
                Console.WriteLine("Bastun är ej påslagen. Du måste sätta på bastun. Värme i bastu {0}C.", celsius);
            }
            else if (celsius < lowerTempLimit)
            {
                Console.WriteLine("Bastun är inte tillräckligt varm. Värme i bastun {0}C, skruva upp värmen", celsius);
            }
            else if (celsius > upperTempLimit)
            {
                Console.WriteLine("Bastun är för varm. Värme i bastun {0}C, skruva ner värmen", celsius);
            }
            else
            {
                Console.WriteLine("Bastun är tillräckligt varm för att kunna basta. Värme i bastun {0}C.", celsius);
            }
        }
        while (celsius < lowerTempLimit || celsius > upperTempLimit);
    }