卡在二维数组中

本文关键字:二维数组 | 更新日期: 2023-09-27 18:24:39

我正在尝试创建一个预订服务,但我已经在这部分工作了很多小时,我就是不知道自己做错了什么。

所以我有一个二维数组,在测试和找出问题时,当我试图打印出一些东西时,我得到的只是System.String[],这并不能让我变得更聪明。我希望能够访问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;
    }

卡在二维数组中

此行:

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

应该是:

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

为什么?假设我有一个数组,里面有两个对象。count就是2然而,索引为01。因此,您必须使用小于的运算符。

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

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

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

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

有关文档,请参阅此处。

假设您有一个名为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(...)string作为自变量。

因此,使用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);
    }