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

List<int>あなたの目的には a の方が適していると思います。必要に応じて自動的に拡張されます。

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の代わりに使用したことに注意してください0new[]コンパイラが初期化子から配列要素の型を推測しようとすると、元のケースでは ではなく と推測され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」関数を使用できます。

fibNums.ToArray();
于 2013-07-07T13:00:41.060 に答える
0

解決:

最初:配列を宣言する必要があります

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

0 から開始するため、temp3+1 を使用します。

次に、ループの条件を次のように変更します

} 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 に答える