0

予約サービスを作成しようとしていますが、この部分で何時間も立ち往生しており、何が間違っているのかわかりません。

だから私は二次元配列を持っていて、テストして何が悪いのかを理解しようとするときに何かを印刷しようとすると、System.String[]実際には賢くならないだけです。m_nameMatrix[0,0]ie で詳細にアクセスして、座席が指定されているかどうかを確認できるようにしたい。

ここに私のフォームコードからのスニペットがあります:

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));
}

そして、ここに私の2番目のクラスからの2つのメソッドがあります:

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 つのオブジェクトを含む配列があるとします。ただし、インデックスはcount01です。したがって、小なり演算子を使用する必要があります。

于 2013-07-23T18:31:40.787 に答える
1

メッセージボックスに" " が表示される場合は、含まれているさまざまな文字列ではなくSystem.String[]、直接出力しようとしていることが原因です。string[]

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());
    }

この場合、引数としてa を取る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);
    }
于 2013-07-23T19:05:13.580 に答える