0

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

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};”。在我的代码中,数组实际上可以有无限数量的元素,具体取决于输入。但是因为,我不知道如何声明一个数组,所以元素的数量仅限于我初始化它的元素数量。

4

5 回答 5

6

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

List<int> fibNums = new List<int> {0, 0, 0, 0, 0};
于 2013-07-07T12:43:23.213 回答
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>或其他一些集合类型。

于 2013-07-07T15:15:59.597 回答
3

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

使用System.Collections.Generic.List而不是数组。


如何启动列表:

var fibNums = new List<int>();

然后,您可以根据需要简单地添加数字:

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

如果您需要一个整数数组,您仍然可以使用列表的“ToArray”-Function:

fibNums.ToArray();
于 2013-07-07T13:00:41.060 回答
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);
于 2013-07-07T14:46:45.990 回答
0

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

int[] fibNums = new int[temp3];

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

顺便说一句,调用变量temp3是一种不好的做法,请改用描述性名称。

于 2013-07-07T13:40:16.390 回答