我一直在练习c#,并决定编写一个代码,将任何小数转换为任何基本表示以供练习。我有一些麻烦。由于我想练习,我决定使用额外的功能进行计算。首先,我想使用数组来保持我的结果。但是,因为,在开始时,我不知道数组的长度,我无法定义它。所以我决定使用列表(不知何故,我假设未声明的插槽默认为0)。这就是我最终的目标。
class MainClass
{
static double number;
static double baseToConvert;
static int counter = 0;
static List<double> converted = new List<double>();
public static void Main(string[] args)
{
Console.WriteLine("Enter a decimal");
number = double.Parse(Console.ReadLine());
Console.WriteLine("Enter a base you want to convert to");
baseToConvert = double.Parse(Console.ReadLine());
ConverterToBase(number);
for (int i = converted.Count - 1; i >= 0; i--)
{
Console.WriteLine(converted[i]);
}
Console.ReadLine();
}
public static void ConverterToBase(double x)
{
double temp = x;
while (x >= baseToConvert)
{
x /= baseToConvert;
counter++;
}
converted[counter] = x;
counter = 0;
if (temp - x * Math.Pow(baseToConvert, Convert.ToDouble(counter)) >= baseToConvert)
{
ConverterToBase(temp - x * Math.Pow(baseToConvert, Convert.ToDouble(counter)));
}
else
{
converted[0] = temp - x * Math.Pow(baseToConvert, Convert.ToDouble(counter));
}
}
}
但在我写入输入后,控制台卡住而没有错误。我的猜测是因为我在列表中没有任何元素“转换[计数器]”没有意义。但我不知道问题可能在其他地方。
我的问题不在于我计算问题的方式(当然欢迎任何建议)。我只是想知道我做错了什么以及我如何处理这种情况(未知的数组大小,使用列表,从另一个方法访问变量,数组......等)。
感谢。
答案 0 :(得分:1)
我之前的回答是错误的,正如@Rufus L所指出的那样。没有无限的循环。但是经过进一步的审查,你的代码中似乎会发生无限递归:
if (temp - x * Math.Pow(baseToConvert, Convert.ToDouble(counter)) >= baseToConvert)
{
ConverterToBase(temp - x * Math.Pow(baseToConvert, Convert.ToDouble(counter)));
}
ConverterToBase调用自身,似乎没有基本情况,也没有return语句来结束递归。
答案 1 :(得分:0)
在名为&#34; ConverterToBase(double x)&#34;的方法中你想设置0元素的值。但是你没有添加任何元素。转换为空。 首先在列表中添加值或值。