如何在C#中声明一个数组?

时间:2013-07-07 12:41:39

标签: c# arrays list collections

如何在不设置初始元素集的情况下声明数组?或者是否必须输入初始元素集?这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        string ans, uname, choice, input;
        int temp;

        Console.WriteLine("Hi! We're Adrianne and Marco, today is " + DateTime.Now + ", what's yours?");
        uname = Console.ReadLine();

        do
        {
            Console.WriteLine("Hello, " + uname + "! Please select a function:");
            Console.WriteLine("1: Palindrome");
            Console.WriteLine("2: Prime or Not Prime");
            Console.WriteLine("3: Bubble Sort");
            Console.WriteLine("4: Fibonacci");
            choice = Console.ReadLine();

            if (choice == "1")
            {
                Console.WriteLine("Enter any word or string:");
                input = Console.ReadLine();
                temp = Palindrome(input);

                if (temp == 0)
                    Console.WriteLine(input + " is not a palindrome...");
                else
                    Console.WriteLine(input + " is a palindrome!");
            }

            else if (choice == "2")
            {
                Console.WriteLine("Enter a number:");
                input = Console.ReadLine();
                temp = Prime(input);

                if (temp == 0)
                    Console.WriteLine(input + " is prime");
                else if (temp == 1)
                    Console.WriteLine(input + " is not prime");
                else
                    Console.WriteLine(input + " is neither prime nor composite");
            }

            else if (choice == "3")
            {
                int h;
                string tempo;
                double[] inputs = { 0, 0, 0, 0, 0, 0, 0, 0 };

                for (int i = 0; i < 8; i++)
                {
                    h = i + 1;
                    if (i == 0)
                    {
                        Console.WriteLine("Enter 1st number:");
                        tempo = Console.ReadLine();
                    }

                    else if (i == 1)
                    {
                        Console.WriteLine("Enter 2nd number:");
                        tempo = Console.ReadLine();
                    }

                    else if (i == 2)
                    {
                        Console.WriteLine("Enter 3rd number:");
                        tempo = Console.ReadLine();
                    }

                    else
                    {
                        Console.WriteLine("Enter " + h + "th number:");
                        tempo = Console.ReadLine();
                    }

                    inputs[i] = Convert.ToDouble(tempo);
                }

                bubbleSort(inputs);
                Console.WriteLine(inputs[0] + " " + inputs[1] + " " + inputs[2] + " " + inputs[3] + " " + inputs[4] + " " + inputs[5] + " " + inputs[6] + " " + inputs[7]);
            }

            else if (choice == "4")
            {
                Console.WriteLine("Enter a whole number:");
                input = Console.ReadLine();

                int temp3 = Convert.ToInt16(input);

                int[] fibNums = {0, 0, 0, 0, 0};

                //for (int i = 0; i < fibNums.Length; i++)
                //{
                //    Console.WriteLine(fibNums[i]);
                //}
                int temp4 = 0;
                do
                {
                    temp = fibSequence(temp4);
                    fibNums[temp4] = temp;
                    temp4++;
                } while (temp <= temp3);

                for (int i = 0; i < fibNums.Length; i++)
                {
                    Console.WriteLine(fibNums[i]);
                }
            }

            Console.WriteLine("There, all finished! Try again? (Y/N)");
            ans = Console.ReadLine();

        } while (ans == "Y");

        Console.WriteLine("Thank you, come again!");
        Console.Read();

    }

错误在这部分“int [] fibNums = {0,0,0,0,0};”。在我的代码中,数组实际上可以包含无限数量的元素,具体取决于输入。但是,因为我不知道如何声明一个数组,元素的数量仅限于我初始化它的元素数量。

5 个答案:

答案 0 :(得分:6)

我认为List<int>更适合您的目的。它会根据需要自动扩展。

List<int> fibNums = new List<int> {0, 0, 0, 0, 0};

答案 1 :(得分:4)

  

如何声明数组类型的局部变量并在不提供数组初始化程序的情况下对其进行初始化?

您已经知道如何声明数组类型的局部变量并使用初始化程序初始化它:

double[] inputs = { 0, 0, 0, 0, 0, 0, 0, 0 };

这种语法 - 使用数组初始值设定项而不包含任何其他内容 - 仅在局部变量或字段声明中是合法的。

还有其他一些使用初始化程序的语法,您可能不知道。只要表达式合法,这些都是合法的,而不仅仅是在初始化程序中:

double[] inputs = new double[] { 0, 0, 0, 0, 0, 0, 0, 0 };
double[] inputs = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 };

当您不能说或不想说出类型时,此语法很有用。但是,您需要确保正确地获取元素的类型:

double[] inputs = new[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };

请注意,我使用的是0.0而不是0。当您说new[]时,编译器会尝试从初始值设定项中推导出数组元素类型,而在原始情况下,它会推导出int[],而不是double[]

你问过如何避免使用初始化器语法。你说:

double[] inputs = new double[8];

它会自动初始化为零。

正如其他人所指出的那样,使用List<double>或其他一些集合类型可能会更好。

答案 2 :(得分:3)

如何在不设置初始元素集的情况下声明数组?

使用System.Collections.Generic.List代替数组。


如何直觉列表:

var fibNums = new List<int>();

然后您可以根据需要添加数字:

int yourNumber = 1;
fibNums.Add(yourNumber);

如果您需要一个整数数组,您仍然可以使用列表中的'ToArray'功能:

fibNums.ToArray();

答案 3 :(得分:0)

如果要创建具有特定数量元素的数组,请使用new运算符:

int[] fibNums = new int[temp3];

这将创建一个包含temp3元素的数组,每个元素都初始化为默认值,0和其他数字类型为int

顺便说一句,调用像temp3这样的变量是一种不好的做法,而是使用描述性名称。

答案 4 :(得分:0)

解决方案:

首先:你需要声明一个数组

int[] fibNums = new int[temp3+1];

我们使用temp3 + 1,因为我们从0开始

然后我们将循环条件改为

} while (temp < temp3);

最终代码是:

                int[] fibNums = new int[temp3+1];
                //for (int i = 0; i < fibNums.Length; i++)
                //{
                //    Console.WriteLine(fibNums[i]);
                //}
                int temp4 = 0;
                do
                {
                    temp = fibSequence(temp4);
                    fibNums[temp4] = temp;
                    temp4++;
                } while (temp < temp3);