0

我正在尝试创建预订服务,但我已经在这部分停留了好几个小时,我只是不知道我做错了什么。

所以我有一个二维数组,当我在测试时尝试打印一些东西并试图找出问题所在时,我得到的只是System.String[]这并没有真正让我变得更聪明。我希望能够访问 ie 中的详细信息m_nameMatrix[0,0]以检查座位是否已保留。

这是我的表单代码中的一个片段:

private void UpdateGUI(string customerName, double price)
{
    string selectedItem = cmdDisplayOptions.Items[cmdDisplayOptions.SelectedIndex].ToString();
    rbtnReserve.Checked = true;
    lstSeats.Items.Clear();
    lstSeats.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem));
}

这是我第二堂课的两种方法:

public string[] GetSeatInfoStrings(string selectedItem)
{
    int count = GetNumOfSeats(selectedItem);

    if (count <= 0)
    {
        return new string[0];
    }
    string[] strSeatInfoStrings = new string[count];

    for (int index = 0; index <= count; index++)
    {
        strSeatInfoStrings[index] = GetSeatInfoAt(index);
    }
    return strSeatInfoStrings;
}

public string GetSeatInfoAt(int index)
{
    int row = (int)Math.Floor((double)(index / m_totNumOfCols));
    int col = index % m_totNumOfCols;

    string seatInfo = m_nameMatrix.GetValue(row, col).ToString();
    return seatInfo;
}

我实际上并没有遇到异常,所以可能是我的逻辑思维受到了打击,因为我花了好几个小时试图弄清楚。

编辑:

public void ReserveSeat(string name, double price, int index)
    {
        int row = (int)Math.Floor((double)(index / m_totNumOfCols));
        int col = index % m_totNumOfCols;

        string reserved = string.Format("{0,3} {1,3} {2, 8} {3, 8} {4,22:f2}",
                                        row + 1, col + 1, "Reserved", name, price);

        m_nameMatrix[row, col] = reserved;
    }
4

3 回答 3

1

这一行:

for (int index = 0; index <= count; index++)

应该:

for (int index = 0; index < count; index++)

为什么?假设我有一个包含 2 个对象的数组。count将是 2。但是,索引是01。所以你必须使用小于运算符。

于 2013-07-23T18:31:40.787 回答
1

如果您在消息框中收到“ System.String[]”,那是因为您尝试string[]直接打印 a,而不是它包含的各种字符串:

string[] data = GetSeatInfoStrings("foo");
MessageBox.Show(data);

相反,您需要显示数据的内容

string[] data = GetSeatInfoStrings("foo");
MessageBox.Show(string.Join("\n", data));

有关文档,请参见此处

于 2013-07-23T18:47:24.330 回答
0

假设您有一个名为的方法ReturnArray()

class Class2
    {
        public string[] ReturnArray()
        {
            string[] str = new string[] { "hello", "hi" };
            return str;
        }

    }

如果你ReturnArray像这样调用你的主类:

    Class2 class2 = new Class2();

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(class2.ReturnArray());
    }

它会返回System.String[],因为在这种情况下MessageBox.Show(...)需要 astring作为参数。

所以你也可以通过使用得到相同的结果MessageBox.Show(class2.ReturnArray().ToString());

相反,您可能想要执行以下操作:

    Class2 class2 = new Class2();

    private void button1_Click(object sender, EventArgs e)
    {
        string[] strArray = class2.ReturnArray();
        listBox1.Items.AddRange(strArray);
    }
于 2013-07-23T19:05:13.580 回答