2

今週から独学で C# の学習を始めましたが、いくつかの概念を理解するのに苦労するかもしれません。int[] と int を受け取り、int[] のみを返すメソッドを作成したいと考えています。2 つのエラーを受け取りました。

メインメソッドの場合:

タイプ 'int[]' を 'int' に暗黙的に変換することはできません

    static void Main(string[] args)
    {
        int[] Num = new int[5];
        int i;
        for (i = 0; i < 5; i++)
            Num[i] = NumGen(Num, i);
    }

作成されたメソッド:

タイプ 'int' を 'int[]' に暗黙的に変換することはできません

  static int[] NumGen(int[] Num, int i)
    {
        Random rndm = new Random();
        Num[i] = rndm.Next(100) + 1;
        return Num[i];

     }

自分が間違ったことを理解し、今後この間違いを回避する方法を知りたいです。事前に回答いただきありがとうございます!

編集:皆さん、ありがとうございます。あなたの提案で問題が解決しました。:)

4

4 に答える 4

8

NumGen-の戻り値の型は次のようになりintます。

static int NumGen(int[] Num, int i)
{
    Random rndm = new Random();
    Num[i] = rndm.Next(100) + 1;
    return Num[i];
}

BUT: あなたのコードには深刻なバグがあります。new Random()そのようなものは、クロックを介してシードされる方法により、毎回同じ値を生成します。より良いアプローチは次のとおりです。

static int NumGen(Random rndm, int[] Num, int i)
{
    Num[i] = rndm.Next(100) + 1;
    return Num[i];
}
static void Main(string[] args)
{
    int[] Num = new int[5];
    Random rand = new Random();
    for (int i = 0; i < 5; i++)
        Num[i] = NumGen(rand, Num, i);
}

またはよりきれいに:

static int Randomize(Random rndm)
{
    return rndm.Next(100) + 1;
}
static void Main(string[] args)
{
    int[] Num = new int[5];
    Random rand = new Random();
    for (int i = 0; i < 5; i++) Num[i] = Randomize(rand);
}
于 2013-11-13T13:41:35.150 に答える
2

int ( )の配列を返すメソッドを宣言し、その戻り値を int ( )int[] NumGen()代入し、そこから単一の int のみを返す ( )。Num[i] = NumGen()return Num[i];

このコードが何をすることが期待されているかを説明できれば、このコードがどのように見えるべきかを提案できるかもしれません.

おそらくすべてを次のものに置き換えることができます:

var random = new Random();
int[] randomNumbers = Enumerable.Range(0, 5)
                                .Select(i => random.Next(100) + 1)
                                .ToArray();

しかし、それでは配列とその構文について学習するという点を見逃してしまいます。

于 2013-11-13T13:41:55.880 に答える
1

Num[i] は int[] ではなく int です。これは int 配列の項目であり、その配列内の要素はすべて int であるためです。したがって、最初の行を置き換えます。

static int NumGen(int[] Num, int i)
    {
        Random rndm = new Random();
        Num[i] = rndm.Next(100) + 1;
        return Num[i];

     }
于 2013-11-13T13:41:56.837 に答える
1

関数が int[] (数値の配列) ではなく int (数値) を返すようにしたい場合

への変更

static int NumGen(int[] Num, int i)

そしてそれは大丈夫なはずです;)

于 2013-11-13T13:42:17.460 に答える