我正在做一个控制台应用程序,用于使用任意公式练习计算BMI。问题在于switch(索引),Visual Studio一直告诉我switch不能使用double,即使我已经将index转换为int。简单地使用Convert.ToInt32(索引)也不起作用。我在这里缺少什么?
bool loop = true;
int suly;
double magassag;
double index;
string valasz;
while (loop)
{
Console.WriteLine("Add meg a sulyodat");
suly = int.Parse(Console.ReadLine());
Console.WriteLine("Add meg a magassagodat");
magassag = double.Parse(Console.ReadLine());
magassag = magassag / 100;
index = suly / Math.Pow(magassag, 2);
index = Math.Round(index, 2);
Console.WriteLine(index + " a testtomeg indexed");
index = Convert.ToInt32(index);
switch (index)
{
case (0-5):
Console.WriteLine("asd1");
break;
case (6-10):
Console.WriteLine("asd");
break;
default:
Console.WriteLine("asd3");
break;
}
Console.WriteLine("Újra? igen/nem");
valasz = Console.ReadLine();
if (valasz == "igen")
loop = true;
else loop = false;
答案 0 :(得分:2)
您无法在交换机中使用double。指数仍是双倍
index = Convert.ToInt32(index);
这会将index的double值转换为int。然后将其分配给index(这是一个double),它将隐式转换返回到double。
int foo = Convert.ToInt32(index)
可行
甚至switch(Convert.ToInt32(index))
只是一些说明:
1)您应该在需要时声明变量。例如,suly
存在于main的scope中,当它只需要在while循环的范围内时。
2)你的循环变量正在执行break
关键字已经执行的操作
3)Convert.ToInt32已经提供了舍入(这是使其与强制转换((int)index
)不同的事情之一。
4)像magassag = double.Parse(Console.ReadLine()); magassag = magassag / 100;
这样的事情很容易在一个陈述中完成,而且可能会更清楚一些。
5)情况(0-5)表示情况(-5),情况(6-10)表示-4。您希望使用if语句if( foo >= 0 || foo <= 5)
或使用switch statement fallthrough
答案 1 :(得分:1)
调试程序总是一个好主意。 在这些情况下,Visual Studio可以为您提供很多帮助。 在计算索引变量后设置断点。
在手表窗口中,您可以检查类型。
无论如何作为解决方案我同意Praveen Paulose
switch(Convert.ToInt32(index))
答案 2 :(得分:0)
索引的数据类型是double。这就是你得到这个错误的原因。
尝试传递一个int,如下所示
switch(Convert.ToInt32(index))
答案 3 :(得分:-1)
index
被声明为double index;
。将其更改为int index;
:
bool loop = true;
int suly;
double magassag;
int index; // not double
string valasz;
否则,分配会将int
生成的Convert.ToInt32()
值再次提升回double
,从而产生您看到的错误。另一种解决方案是完全抛弃index
,只需在需要的地方进行转换:
switch( Convert.ToInt32(index))