卡在二维数组中
本文关键字:二维数组 | 更新日期: 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然而,索引为0和1。因此,您必须使用小于的运算符。
如果您在消息框中收到"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);
}