我是编程的新手,并且一直致力于将桑拿温度从华氏温度转换为摄氏温度的程序,然后告诉用户他/她是否应该根据原始输入数量来调高温度。我已经完成了我的大部分代码,但现在我无法理解为什么当我写一个低于73度或超过77度的数字时它不会循环。任何人都能看到我的眼睛似乎找不到的问题吗?
using System;
namespace BastunKP
{
class Program
{
public static int FahrToCels(int fahr)
{
int tempCels = (fahr - 32) * 5 / 9;
return tempCels;
}
public static void Main(string[] args)
{
Console.WriteLine("Skriv in Fahrenheit: ");
int fahr = int.Parse(Console.ReadLine());
int tempCels = FahrToCels(fahr);
do
{
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 lagom, hoppa in!");
return;
}
fahr = int.Parse(Console.ReadLine());
tempCels = FahrToCels(fahr);
}
while (tempCels < 73 && tempCels > 77);
}
}
}
我也有一个关于我的任务的问题,老师说过,对于更高的年级,我应该研究将华氏温度转换为摄氏温度的公式,并使其成为双倍,但我根本不知道如何做这个改变。
提前致谢
欢迎来到StackOverflow!现在,让我们来看看你的问题:
首先,考虑你的do-while
循环。
do {
if (tempCels < 73) {
// Temperature too high
Console.WriteLine("Temperaturen är för kallt, skruva upp lite!");
} else if (tempCels > 77) {
// Temperature too low
Console.WriteLine("Temperaturen är för varmt, skruva ner lite!");
} else {
// Temperature just right, hop in!
Console.WriteLine("Temperaturen är nu lagom, hoppa in!");
return;
}
fahr = int.Parse(Console.ReadLine());
tempCels = FahrToCels(fahr);
}
while (tempCels < 73 || tempCels > 77);
如您所见,我删除了不必要的其他条件。现在发生的是,检查所有可能的条件(temp < 73
,temp > 77
和73 < temp < 77
)。
你在其他答案中指出的一个错误就是你有&& (AND)
而不是|| (OR)
。当然,价值不能低于73和高于77 :)
现在,我还要指出一些我觉得应该“修复”的造型/一般事物:
1)您的临时转换方法包含不必要的变量创建和赋值。如果没有它,你可以使它工作,如下所示:
public static int fahrToCels(int fahr) {
// It returns just the same, without needing to create a new,
// temporary temperature variable!
return (fahr - 32) * 5 / 9;
}
2)这可能是有争议的,但一般命名约定说函数名称是用camelCase编写的。
3)虽然这在您的方案中不是特别的问题,但是当您扩展应用程序(或在更大的应用程序上工作)时,它可能会成为一个问题。最好使用稍微更具描述性的namings(在更大的项目中,只是fahr可能会令人困惑)。再说一遍,这不是什么大问题,只是为了你未来考虑的事情:)
附:我没有在我的示例中更改变量名称,只是为了使其更易于阅读/与您展示的代码相关联。
编辑:
根据要求,以下是如何将值保持为double
类型。
// Notice the return type and the property types are both double.
public static double fahrToCels(double fahr) {
return (fahr - 32) * 5 / 9;
}
这样,值不必只是整数,并且在除法上产生奇怪的结果 - 它们也可以是double类型!
现在,请记住,您需要将double类型的变量传递给函数,否则会出现类型错误。
暗示:
double fahr = int.Parse(Console.ReadLine());
让用户传递一个非整数值(比如17.7),它将被正确存储。
提示#2:
如果你真的想做即时转换,你可以这样做(示例值):
int ourInteger = 4;
double ourNewDoubleNumber = (double)ourInteger / 23;
您可以在此处阅读有关类型和类型转换的更多信息:Types and Type Casting
tempCels < 73 && tempCels > 77
从来都不是真的!
很可能你想要||
这样在温度低于73
或大于77
时运行,但谁知道。
tempCels
(或任何数字,就此问题而言)不能同时低于73和超过77。您应该使用逻辑||
运算符,而不是逻辑&&
运算符:
do {
// code
} while (tempCels < 73 || tempCels > 77);
// Here ---------------^
while
将在条件为真时循环,但tempCels
不能同时是<73
和>77
!修复这个条件,它会工作。