试着抓住C#我该怎么做?

即时工作的任务,我现在必须实施尝试&捕捉方法也赶上我的程序中的数字以外的输入。我理解我学习过程中的过程和解释,并在尝试时做了一些小例子。但是当我想把这个工作贯彻到我的任务中时,我陷入了困境。有人可以在庄园里向我解释,不要破坏任何东西,只是试图帮助我一路?试着抓住C#我该怎么做?

这里是我的代码:

using System; 

namespace BastunKP

{

class Program

{

public static double FahrToCels(double fahr)

{

return (fahr - 32) * 5/9;

}

public static void Main(string[] args)

{

Console.WriteLine("Skriv in Fahrenheit: ");

double fahr = Convert.ToDouble(Console.ReadLine());

double tempCels = FahrToCels(fahr);

do

{

try

{

//Dont know what to write here.

}

catch

{

Console.WriteLine("Du kan bara skriva in siffor, testa igen.");

}

if (tempCels < 73)

{

Console.WriteLine("Temperaturen är för kallt, skruva upp lite!");

}

else if (tempCels > 77)

{

Console.WriteLine("Temperaturen är för varmt, skruva ner lite!");

}

else

{

Console.WriteLine("Temperaturen är nu bra, hoppa in!");

Console.ReadKey();

}

fahr = Convert.ToDouble(Console.ReadLine());

tempCels = FahrToCels(fahr);

}

while (tempCels < 73 || tempCels > 77);

return;

}

}

}

回答:

首先,让我们编写没有任何异常处理的代码。首先获得基本知识。我们需要一种方法:

  1. 询问用户的华氏温度。
  2. 如果输入不是有效的double,请转至1.
  3. 将该值转换为摄氏度。
  4. 如果没有,去1
  5. 如果摄氏温度不属于(73, 77)去1

    public static double GetTemperatureFromUser() 

    {

    while (true)

    {

    Console.Write("Enter temperature in Fahrenheit: ");

    var t = FahrToCels(Convert.ToDouble(Console.ReadLine()));

    if (t < 73)

    {

    Console.Write("Temperature is too low. Try again.");

    }

    else if (t > 77)

    {

    Console.Write("Temperature is too high. Try again.");

    }

    else

    {

    return t;

    }

    }

    }

好吧,这看起来不错。现在我们来添加一些异常处理。第一个问题:这里会出现什么问题并抛出异常?

var t = FahrToCels(Convert.ToDouble(Console.ReadLine())); 

似乎是一个可能的嫌疑犯。还有什么可以抛出?嗯,不。

好的,第二个问题:如果ToDouble()抛出什么代码不应该执行?那么,显然这取决于ToDouble()的结果。所以所有的代码也在try块中。

好的,第三个问题:如果ToDouble()抛出什么代码应该运行?在我们的情况下,我们应该通知用户输入不是有效的double。好的,该代码需要在catch区块中进行。

try-catch觉得作为一个奇特的if控制代码的执行路径:如果代码抛出,去catch如果没有,保持try块内正常执行。

第四个问题:无论发生什么情况,trycatch块内的其他所有内容都应该运行什么代码?在你的情况下,什么都没有,但如果有的话,它会在finally区块中出现。

注意catchfinally块是不是强制性的。唯一的规则是它们中的至少一个必须紧跟在try块之后; try-catch,try-finallytry-catch-finally都是有效的。

第五和最后一个:你要处理哪种异常?您应该始终处理只有您知道如何处理的例外情况,并忽略所有其他情况。 ToDouble会抛出什么异常?如果您阅读文档,您会发现它可能会丢失FormatExceptionOverflowException。您可以处理两者,因为它们构成了相同的事情:无效的用户输入。

好吧,让我们重写方法:

是否while循环依赖于ToDouble无论发生什么事情?不,不管内部发生什么,该方法都应该循环运行;退出循环的唯一方法是当用户输入一个有效的数字并且方法返回时。好吧,那将while块去外面任何异常处理等不提示用户:

public static double GetTemperatureFromUser() 

{

while (true)

{

Console.Write("Enter temperature in Fahrenheit: ");

//...

}

}

而现在的下一条指令是我们的首要犯罪嫌疑人,因此很明显必须去try块内。一切我们已经写在我们的方法取决于t的价值,所以我们把所有的也try块内:

public static double GetTemperatureFromUser() 

{

while (true)

{

Console.Write("Enter temperature in Fahrenheit: ");

try

{

var t = FahrToCels(Convert.ToDouble(Console.ReadLine()));

if (t < 73)

{

Console.Write("Temperature is too low. Try again.");

}

else if (t > 77)

{

Console.Write("Temperature is too high. Try again.");

}

else

{

return t;

}

}

}

}

好了,现在我们只缺少catch块。我们将为每个我们知道如何处理的异常添加一个:

public static double GetTemperatureFromUser() 

{

while (true)

{

Console.Write("Enter temperature in Fahrenheit: ");

try

{

var t = FahrToCels(Convert.ToDouble(Console.ReadLine()));

if (t < 73)

{

Console.Write("Temperature is too low. Try again.");

}

else if (t > 77)

{

Console.Write("Temperature is too high. Try again.");

}

else

{

return t;

}

}

catch (FormatException)

{

Console.Write("Invalid number format. Try again.");

}

catch (OverflowException)

{

Console.Write("Number is too large or too small. Try again.");

}

}

}

然后你走了,我们完成了。

回答:

没有要求try/catch检查有效的输入。你可以使用double.TryParse;

Console.WriteLine("Skriv in Fahrenheit: "); 

double fahr;

double tempCels;

bool isInputCorrect = false;

while (!isInputCorrect)

{

var input = Console.ReadLine();

if (!double.TryParse(input, out fahr))

{

Console.WriteLine("Du kan bara skriva in siffor, testa igen.");

continue;

}

tempCels = FahrToCels(fahr);

if (tempCels < 73)

{

Console.WriteLine("Temperaturen är för kallt, skruva upp lite!");

continue;

}

else if (tempCels > 77)

{

Console.WriteLine("Temperaturen är för varmt, skruva ner lite!");

continue;

}

isInputCorrect = true;

}

Console.WriteLine("Temperaturen är nu bra, hoppa in! tempCels : " + tempCels);

Console.ReadKey();

如果你坚持使用try/catch,你可以尝试这样的;

只需更换double.TryParse部分。

var input = Console.ReadLine(); 

try

{

fahr = Convert.ToDouble(input);

}

catch (Exception e)

{

Console.WriteLine("Du kan bara skriva in siffor, testa igen.");

continue;

}

以上是 试着抓住C#我该怎么做? 的全部内容, 来源链接: utcz.com/qa/264767.html

回到顶部