不知道为什么我的循环不循环
Don't know why my loop does not loop
我是编程新手,一直在开发一个程序,将桑拿温度从华氏度转换为摄氏度,然后告诉用户 he/she 是否应该根据原始输入调高或调低温度数字。我已经完成了我的大部分代码,但现在我不明白为什么当我写一个低于 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);
}
}
}
我也有一个关于我的作业的问题,老师说为了获得更高的年级,我应该研究将华氏度转换为摄氏度并将其设为双倍的公式,但我不知道如何在全部.
提前致谢
tempCels < 73 && tempCels > 77
永远不会是真的!
当温度小于 73
或大于 77
时,您很可能想要 ||
以便 运行,但谁知道呢。
while
会在条件为真时循环,但是tempCels
不能同时为<73
和>77
!修复该条件,它将起作用。
tempCels
(或任何数字,就此而言)不能同时小于 73 和大于 77。您应该使用逻辑 ||
运算符,而不是逻辑 &&
运算符:
do {
// code
} while (tempCels < 73 || tempCels > 77);
// Here ---------------^
欢迎使用 Whosebug!现在,让我们开始回答您的问题:
首先,考虑您的 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);
如您所见,我删除了不必要的 else 条件。现在发生的是检查所有可能的条件(temp < 73
、temp > 77
和 73 < temp < 77
)。
你有一个错误,在其他答案中也指出,你有 && (AND)
而不是 || (OR)
。当然,一个值不能同时低于 73 和高于 77 :)
现在,我还想指出一些我认为您应该做的样式/一般事项 'fix':
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) 这可能值得商榷,但一般的命名约定表明函数名称是用驼峰命名的。
3) 虽然这在您的具体场景中不是问题,但当您扩展应用程序(或处理更大的应用程序)时,它可能会成为一个问题。
最好使用稍微更具描述性的命名(在更大的项目中,只是 fahr 可能会造成混淆)。同样,这不是什么大问题,只是供您以后考虑的问题:)
P.S。我没有在我的示例中更改变量名称,只是为了使其更符合您显示的代码 readable/relateable。
编辑:
根据要求,以下是如何将值保持为 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 fahr = int.Parse(Console.ReadLine());
会让用户传递一个非整数值(比如 17.7),它会被正确存储。
提示#2:
如果你真的想进行即时转换,你可以这样实现(示例值):
int ourInteger = 4;
double ourNewDoubleNumber = (double)ourInteger / 23;
您可以在此处阅读有关类型和类型转换的更多信息:Types and Type Casting
我是编程新手,一直在开发一个程序,将桑拿温度从华氏度转换为摄氏度,然后告诉用户 he/she 是否应该根据原始输入调高或调低温度数字。我已经完成了我的大部分代码,但现在我不明白为什么当我写一个低于 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);
}
}
}
我也有一个关于我的作业的问题,老师说为了获得更高的年级,我应该研究将华氏度转换为摄氏度并将其设为双倍的公式,但我不知道如何在全部.
提前致谢
tempCels < 73 && tempCels > 77
永远不会是真的!
当温度小于 73
或大于 77
时,您很可能想要 ||
以便 运行,但谁知道呢。
while
会在条件为真时循环,但是tempCels
不能同时为<73
和>77
!修复该条件,它将起作用。
tempCels
(或任何数字,就此而言)不能同时小于 73 和大于 77。您应该使用逻辑 ||
运算符,而不是逻辑 &&
运算符:
do {
// code
} while (tempCels < 73 || tempCels > 77);
// Here ---------------^
欢迎使用 Whosebug!现在,让我们开始回答您的问题:
首先,考虑您的 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);
如您所见,我删除了不必要的 else 条件。现在发生的是检查所有可能的条件(temp < 73
、temp > 77
和 73 < temp < 77
)。
你有一个错误,在其他答案中也指出,你有 && (AND)
而不是 || (OR)
。当然,一个值不能同时低于 73 和高于 77 :)
现在,我还想指出一些我认为您应该做的样式/一般事项 'fix':
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) 这可能值得商榷,但一般的命名约定表明函数名称是用驼峰命名的。
3) 虽然这在您的具体场景中不是问题,但当您扩展应用程序(或处理更大的应用程序)时,它可能会成为一个问题。 最好使用稍微更具描述性的命名(在更大的项目中,只是 fahr 可能会造成混淆)。同样,这不是什么大问题,只是供您以后考虑的问题:)
P.S。我没有在我的示例中更改变量名称,只是为了使其更符合您显示的代码 readable/relateable。
编辑:
根据要求,以下是如何将值保持为 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 fahr = int.Parse(Console.ReadLine());
会让用户传递一个非整数值(比如 17.7),它会被正确存储。
提示#2:
如果你真的想进行即时转换,你可以这样实现(示例值):
int ourInteger = 4;
double ourNewDoubleNumber = (double)ourInteger / 23;
您可以在此处阅读有关类型和类型转换的更多信息:Types and Type Casting