1

私は C# 用の在庫プログラムを作成しています。これまでのところ、在庫内のすべてのアイテムを出力する関数をスクリプト化しました。次に、アイテムに関する詳細情報を取得する関数を作成しています。在庫を印刷すると、アイテムの名前だけが印刷されます。この関数はすべての詳細を出力するため、武器の場合は名前、ダメージ、およびクリティカル ヒットが出力されます。

だからここに私のGetInfo関数があります:

  public void GetInfo()
{
    Console.WriteLine("If you want more detail about an item, type the number to its left.  \nOtherwise, type (Q)");

    int getinfo;
    int.TryParse(Console.ReadLine(), out getinfo);
    getinfo -= 1; 

    if(getinfo > InventorySlots || getinfo < 0)
    {
        throw new System.Exception("You entered an invalid number"); 
    }

    if (weapons.Count >= getinfo)
    {
        Console.Clear(); 
        Console.Write("Weapon Name: " + weapons[getinfo].name + "\nDamage: " + weapons[getinfo].damage + "\nCritical: " + weapons[getinfo].critical);
        Console.ReadLine(); 
    }

    else if ((weapons.Count + armors.Count) >= getinfo)
    {
        Console.Clear();
        Console.Write("Armor Name: " + armors[getinfo].name + "\nArmor Value: " + armors[getinfo].armor + "\nHealth Boost: " + armors[getinfo].healthboost);
        Console.ReadLine(); 
    }

    else if ((weapons.Count + armors.Count + ores.Count) >= getinfo)
    {
        Console.Clear();
        Console.Write("Ore Name" + ores[getinfo].name + "(" + ores[getinfo].stack + ")"); 
    }

}

さて、問題は次のステートメントです。

if(weapons.Count >= getinfo

getinfo がweapons.Countよりも大きいにもかかわらず、実行中です。ステートメントが無効な場合、ステートメントが実行されるのはなぜですか?

ありがとう。

4

1 に答える 1

1

ここでの問題は、getinfo がweapons.Count よりも大きいにもかかわらず、ステートメント ... が実行されていることです。

IndexOutOfBoundsExceptionおそらく、コードがこれにヒットしたときに取得しているため、これを言っているのでしょう。

weapons[getinfo].name

したがって、getinfoが より大きいと想定していますweapons.Count。しかし、実際には に等しい weapons.Countです。C# では、リストと配列へのインデックス アクセスは 0 から始まります。これはweapons[weapons.Count - 1]、そのコレクションの最後の項目であることを意味します。

ifステートメントを次のように変更します。

if (weapons.Count > getinfo)
于 2013-02-23T19:07:22.970 に答える