结构数组|没有传递价值

时间:2015-09-12 14:02:34

标签: c# struct

我是C#中的结构新手而且我被卡住了,无法将文件中的值传递回struct并成功读取它们。

初始化值工作正常,但文件根本不会加载

这是我到目前为止所做的:

    public struct Card
    {
        public char suit;//'C'- Clubs, 'D'-Diamonds,'H'- Hearts
        //and 'S'- Spades

        public int value;//2-14 – for 2-10, Jack, Queen, King, Ace
    }

    static void Main(string[] args)
    {

        const int CARDS_IN_HAND = 5;//number of cards in hand

        Card[] hand = new Card[CARDS_IN_HAND];//array of cards

        InitialiseArray(hand);
        Console.WriteLine("-------------\n");
        Console.WriteLine("Initialised Values in Array");
        DisplayHandData(hand);
        Console.ReadLine();

问题似乎在

之下
        LoadArray(hand);//load values into array for use

        //check values loaded to array
        Console.WriteLine("-------------\n");
        Console.WriteLine("Actuals Values in Array from file");
        DisplayHandData(hand);
        Console.ReadLine();

    }
    public static void InitialiseArray(Card[] data)
    {
        for (int count = 0; count < data.Length; count++)
        {
            data[count].suit = 'C';
            data[count].value = 0;
        }
    }

    public static void LoadArray(Card[] data)
    {
        string fileName = "FullHouse.txt";//name of file for menu item 3
        //data in file = C 13 H 13 D 13 C 10 H 10
        string input = fileName;

        List<Card> cards = new List<Card>();
        //string input = fileName;

        StreamReader inFile = new StreamReader(fileName);//open file
        input = inFile.ReadLine();//priming read for array

        string[] inputArray = input.Split(new char[] { ' ' },
            StringSplitOptions.RemoveEmptyEntries);

        //input loading data into array
        for (int i = 0; i < 10; i += 2)
        {
            Card newCard = new Card();
            newCard.suit = inputArray[i][0];
            newCard.value = int.Parse(inputArray[i + 1]);
            cards.Add(newCard);
        }
        inFile.Close();
    }

    public static void DisplayHandData(Card[] data)
    {
        Console.WriteLine();
        //test values loaded into array in correct positions
        for (int records = 0; records < data.Length; records++)
        {
            Console.WriteLine(data[records].suit);
            Console.WriteLine(data[records].value);
        }
        Console.WriteLine("-------------\n");
        Console.ReadLine();

    }

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

你的LoadArray应该可以正常工作。问题可能是您填写变量cards,这是一个本地List<Card>,但您可能要做的是填写data参数。

以下是我在for方法中改变LoadArray - 周期的习惯

for (int i = 0; i < data.Length; ++i)
{
    Card newCard = new Card();
    newCard.suit = inputArray[i * 2][0];
    newCard.value = int.Parse(inputArray[i * 2 + 1]);
    data[i] = newCard;
}

但请注意这种方法。它非常脆弱。如果datainputArray的长度不匹配,您将获得异常(如果inputArray将比预期的短)。您应该在for - 周期之前检查长度。

答案 1 :(得分:1)

您的LoadArray()方法不会更改传入其中的数组的内容。

我建议您在main方法中使用List,然后将LoadArray()更改为:

public static List<Card> LoadArray()
{
    string fileName = "FullHouse.txt";//name of file for menu item 3
    //data in file = C 13 H 13 D 13 C 10 H 10
    string input = fileName;

    List<Card> cards = new List<Card>();
    //string input = fileName;

    StreamReader inFile = new StreamReader(fileName);//open file
    input = inFile.ReadLine();//priming read for array

    string[] inputArray = input.Split(new char[] { ' ' },
        StringSplitOptions.RemoveEmptyEntries);

    //input loading data into array
    for (int i = 0; i < 10; i += 2)
    {
        Card newCard = new Card();
        newCard.suit = inputArray[i][0];
        newCard.value = int.Parse(inputArray[i + 1]);
        cards.Add(newCard);
    }
    inFile.Close();

    return cards;
}

那么你根本不需要InitialiseArray()方法。

相反,你可以这样做:

var hand = LoadArray();

当然,您可能希望将LoadArray()重命名为LoadHand()

答案 2 :(得分:0)

您可以使用Console.WriteLine(hand.Count)检查该值,这会为您提供尺寸,您可以在hand中显示您的数据

foreach(var h in hand)
{
   Console.WriteLine(h.suit);
   Console.WriteLine(h.value);
}

如果您愿意,也可以尝试一下。

hand.ForEach(h=> 
{
   Console.WriteLine(h.suit);
   Console.WriteLine(h.value);
});

<强>被修改: 对不起,马修;我应该在你的回答中作为评论。 : - )