我是编程新手,并且一直致力于将桑拿温度从华氏温度转换为摄氏温度的程序,然后告诉用户他/她是否应该根据原始输入数量来调高温度。我已经完成了大部分代码但现在我无法理解当我写一个低于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);
}
}
}
我也有一个关于我的任务的问题,老师说过,为了更高的年级,我应该研究将华氏温度转换为摄氏温度的公式,并使其成为双倍,但我根本不知道如何做这个改变。
提前致谢
答案 0 :(得分:4)
tempCels < 73 && tempCels > 77
永远不会成真!
您可能希望||
在温度低于73
或高于77
时运行,但谁知道。
答案 1 :(得分:2)
tempCels
(或任何数字,对此而言)不能同时小于73且大于77。您应该使用逻辑||
运算符,而不是逻辑&&
运算符:
do {
// code
} while (tempCels < 73 || tempCels > 77);
// Here ---------------^
答案 2 :(得分:1)
欢迎使用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:)
现在,我还要指出一些我认为应该修复的样式/一般事物&#39;:
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)虽然这在您的方案中没有特别的问题,但是当您扩展应用程序(或在更大的应用程序上工作)时,它可能会成为一个问题。 最好使用稍微更具描述性的命名(在更大的项目中,只是fahr可能会令人困惑)。同样,它不是一个大问题,只是你需要考虑的未来:)
P.S。我没有在我的示例中更改变量名,只是为了使它更易于阅读/与您展示的代码相关。
编辑:
根据请求,以下是如何将值保持为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
答案 3 :(得分:0)
while
将循环,但tempCels
不能同时为<73
和>77
!修复这个条件,它会起作用。