C# - 坚持使用列表和数组

时间:2017-08-01 23:31:34

标签: c# arrays list

我一直在练习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));
        }
    }
}

但在我写入输入后,控制台卡住而没有错误。我的猜测是因为我在列表中没有任何元素“转换[计数器]”没有意义。但我不知道问题可能在其他地方。

我的问题不在于我计算问题的方式(当然欢迎任何建议)。我只是想知道我做错了什么以及我如何处理这种情况(未知的数组大小,使用列表,从另一个方法访问变量,数组......等)。

感谢。

2 个答案:

答案 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元素的值。但是你没有添加任何元素。转换为空。 首先在列表中添加值或值。