我正在尝试构建一个温度转换器来帮助自己学习C#。我只知道大部分基础知识,这是我迄今为止所提出的。我坚持使用的是获取用户输入的数字,并将其转换为用户先前输入的选项,即farenheit或者摄氏度。同样,我只知道基础知识,但非常感谢帮助。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("What sort of temperature would you like to convert?");
string tempType = Console.ReadLine();
ConvertChoice(tempType.ToLower());
Console.WriteLine("Please enter a temperature to convert: ");
string temperatureString = Console.ReadLine();
int temperature = int.Parse(temperatureString);
Console.ReadLine();
}
static void ConvertChoice(string tempType)
{
switch (tempType)
{
case "farenheit":
Console.WriteLine("Farenheit it is!");
return;
case "celsius":
Console.WriteLine("Celsius it is!");
return;
default:
Console.WriteLine("Invalid type, please type farenheit or celsius.");
return;
}
}
}
}
答案 0 :(得分:0)
假设你输入类似“Celsius,20”的意思,你想要将20ºC转换为华氏温度,你需要一些这样的逻辑
if type == fahrenheit
result = [formula from fahrenheit to celsius, using 'temperature']
restype = "celsius"
else
result = [formula from celsius to fahrenheit, using 'temperature']
restype = "fahrenheit"
print "The result is", result, "degrees", restype
不确定这是否能回答你的问题。
更好的方式是支持开尔文。根据用户输入的内容将输入温度转换为开尔文,然后将开尔文转换为用户想要的任何值。然后,您可以支持转换为/从任何类型的单位转换,而无需单独处理每个案例:
any unit -> kelvin -> any other unit
如果你没有看到这个优势,想象一下如何为5个或10个不同单位而不是2个单位编码。
答案 1 :(得分:0)
你已经将他们的选择存储在tempType中。使用它。
static double GetTemp(string tempChoice, int temperature)
{
double convertedTemp = 0.0;
if(tempChoice.Equals("farenheit", StringComparison.CurrentCultureIgnoreCase))
{
convertedTemp = ((double)temperature * 9.0/5.0) + 32.0;
}
else
{
convertedTemp = ((double)temperature -32.0) * 5.0/9.0;
}
return convertedTemp;
}
只需从您的main()调用此函数。
(注意:是的,我意识到这在功能上有限,并且假设只有两种可能的温标.OP表示他正在学习编程,所以我选择了最简单的例子。)
修改强> 的 修正了我的算法。现在,逻辑实际上按预期工作。
答案 2 :(得分:0)
这是怎么回事?
namespace ConsoleApplication1
{
// Using an enum to store the result of
// parsing user input is good practice.
public enum Scale
{
Unknown,
Celsius,
Farenheit
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("What sort of temperature would you like to convert?");
string tempType = Console.ReadLine();
switch(ConvertChoice(tempType))
{
case Scale.Celsius:
// do celsius work here
break;
case Scale Farenheit:
// do farenheit work here
break;
default:
// invalid input work here
}
Console.ReadLine();
}
static Scale ConvertChoice(string tempType)
{
// use the framework. also, when dealing with string equality, its best
// to use an overload that uses the StringComparison enum.
if(tempType.StartsWith("f", StringComparison.CurrentCultureIgnoreCase))
return Scale.Farenheit;
if(tempType.StartsWith("c", StringComparison.CurrentCultureIgnoreCase)))
return Scale.Celsius;
return Scale.Unknown;
}
}
}
答案 3 :(得分:0)
使用对象方法....原谅一些可能的语法/样式错误,通常不使用c#本...
class TempConverter
{
public string degreeType {get; set;}
public double userTemp {get; set;}
public TempConverter(){}
public double convert()
{
switch(this.degreeType)
{
case "F":
return this.convertToF();
case "C":
return this.convertToC();
default:
return null;
}
}
public double convertToF()
{
return //user temp converted to F
}
public double convertToC()
{
return //user temp converted to C
}
}
然后你的主要类看起来像:
class Program
{
static void Main(string[] args)
{
TempConverter converter = new TempConverter();
Console.WriteLine("What sort of temperature would you like to convert?");
converter.degreeType = Console.ReadLine();
ConvertChoice(converter.degreeType);
Console.WriteLine("Please enter a temperature to convert: ");
converter.userTemp = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(Double.ToString(converter.convert());
}
static void ConvertChoice(string tempType)
{
switch (tempType)
{
case "farenheit":
Console.WriteLine("Farenheit it is!");
return;
case "celsius":
Console.WriteLine("Celsius it is!");
return;
default:
Console.WriteLine("Invalid type, please type farenheit or celsius.");
return;
}
}
}
答案 4 :(得分:0)
你的程序有一些缺点;首先,您需要保存用户想要执行的转换类型,以便在他/她输入需要转换的温度时实际执行该转换。由于你只使用两种温度类型(华氏温度和摄氏温度(是的,那么,无论如何都使用Réaumur?))你可以将用户选择存储为表示是否选择了华氏温度的布尔值。您可能还想接受十进制数字。
所以,说了这些,你可以改变你的计划以反映我的建议:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
bool isFahrenheit;
bool temperatureTypeHasBeenDetermined = false;
while(!temperatureTypeHasBeenDetermined){
Console.WriteLine("What sort of temperature would you like to convert?");
string tempType = Console.ReadLine();
temperatureTypeHasBeenDetermined = ConvertChoice(tempType.ToLower(), out isFahrenheit);
}
decimal temperature;
bool temperatureEnteredCorrectly = false;
while(!temperatureEnteredCorrectly){
Console.WriteLine("Please enter a temperature to convert: ");
string temperatureString = Console.ReadLine();
temperatureEnteredCorrectly = decimal.TryParse(temperatureString, out temperature);
}
//Now we are ready to do the conversion
decimal convertedTemperature = isFahrenheit ?
ConvertFromFahrenheitToCelsius(temperature) :
ConvertFromCelsiusToFahrenheit(temperature);
string from = isFahrenheit ? "F" : "C";
string to = isFahrenheit ? "C" : "F";
Console.WriteLine("{0}{1} = {2}{3}", temperature, from, convertedTemperature, to);
Console.ReadLine();
}
static decimal ConvertFromFahrenheitToCelsius(decimal temperature)
{
//Implement properly
return 60m;
}
static decimal ConvertFromCelsiusToFahrenheit(decimal temperature)
{
//Implement properly
return 42m;
}
static bool ConvertChoice(string tempType, out bool isFahrenheit)
{
isFahrenheit = false;
switch (tempType)
{
case "fahrenheit":
Console.WriteLine("Fahrenheit it is!");
isFahrenheit = true;
return true;
case "celsius":
Console.WriteLine("Celsius it is!");
return false;
default:
Console.WriteLine("Invalid type, please type fahrenheit or celsius.");
return false;
}
}
}
}
请注意,我已确保通过循环输入正确的温度类型和温度值,直到获得有效值。
我希望这能引导你朝着正确的方向进一步自我学习。如果您对上述内容有任何疑问,请随时询问。作为免责声明,我必须说我没有编译上面的代码,但我的心理语法检查器通常非常可靠; - )