如何将双暗阵列转换为单调?

时间:2010-07-19 21:44:42

标签: vb.net

问题是我首先必须将二维变换为一维,然后找到所选索引然后再转换然后保存新索引。之后我必须使用正确的string.format来显示正确的输出..我只是困惑=(

在程序中有两个文本框要求“row”和“col”大小,然后按下按钮并显示一个列表框

...............................................................................................................................
Row...Col.......................................................................................................................................
1------1----Vacant ........................................................................
1......2.......Vacant...................................................................................................
1......3.......Vacant....................................................................................................................................
2------1----Vacant.........................................................................................................................
2......2.......Vacant....................................................................................................................................
2......3.......Vacant..........................................................................................................................................................
3------1----Vacant....................................................................................................................................
etc.............................................................................................................................................................

当我双击一行时,它必须说“保留” 有人可以帮我解决这个问题吗?

到目前为止,这是我的项目文件夹,您可以看到我的failed codethis is my assignment

这就是程序最终看起来的样子 http://i29.tinypic.com/risq6r.jpg

'Created by: Hans Elias Juneby
'Started: July 10, 2010 Completed July 0, 2010

Public Class MainFrame
'''<summary>
''' Enum used for choices of showing results
 ''' </summary>
'''<remarks></remarks>
 Private Enum UpdateOptions
  ShowAllSeats               'reserved and vacant seats
  ShowOnlyVacantSeats        'Only vacant seats   
  ShowOnlyReservedSeats      'Only reserved seats
End Enum

'Instance variables
Private bookingObj As SeatBooking = New SeatBooking()
Private showOptions As UpdateOptions = UpdateOptions.ShowAllSeats

'''<summary>
''' Default constructor
''' Initialize components and do other preparations.
''' This method is called automatically before the form is made visible
''' </summary>
''' <remarks></remarks>
Public Sub New()

  ' This call is required by the Windows Form Designer.
  InitializeComponent()

  ' My initialization
  InitializeControlvalues()
  UpdateResults()
End Sub

'''<summary>
''' Organize initiations
''' Fill comboboxes with options (strings), set default values, etc
''' </summary>
'''<remarks></remarks>
Private Sub InitializeControlvalues()
  FillUnitTypeList()
  lstUnits.SelectedIndex = -1
  cmbShowOptions.Items.AddRange([Enum].GetNames(GetType(UpdateOptions)))
  cmbShowOptions.SelectedIndex = 0
  rbtnLetters.Checked = True
  ' txtNumOfSeats.Text = bookingObj.GetMaxCols.ToString() 'default values
  ' txtNumOfRows.Text = bookingObj.GetMaxRows.ToString() 'default values
  lblNumVacants.Text = String.Empty 'default values  
  lblTotal.Text = String.Empty 'default values
  lblPercent.Text = String.Empty 'default values
 End Sub

 ''' <summary>
 ''' Clear listbox, format new strings with the help of the bookingObj and
 '''fill in the box.
 '''  </summary>
 ''' <remarks></remarks>
 Private Sub UpdateResults()

 End Sub

 '''<summary>
 ''' Helper function that returns a string containing a string "** Reserved **" or
 '''"Vacant" or no text according the value in showOptions. THe UpdateResults
 ''' calls this function in detecting which string to show in the listbox
 ''' </summary>
''' <param name="row">Input</param>
''' <param name="col">Input</param>
''' <returns>A formatted string as explained above</returns>
'''<remarks></remarks>
Private Function GetReservationStatusString() 

  Select Case (cmbShowOptions.SelectedIndex)

     Case 0

     Case 1

     Case 2

  End Select

 End Function

'Fills values in the combobox
 Private Sub FillUnitTypeList()
  Dim units As String() = {"Bus Seats", "Train Seats", "Plane Seats"}
  cmbUnitType.Items.AddRange(units)
  cmbUnitType.SelectedIndex = 0

End Sub

Private Sub cmbShowOptions_SelectedIndexChange(ByVal sender As System.Object, ByVal e As System.GC)
  showOptions = DirectCast(cmbShowOptions.SelectedIndex, UpdateOptions)
  UpdateResults()
End Sub


   Private Sub btnMatrix_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMatrix.Click
  Dim SeatBooking As New SeatBooking

  bookingObj.GetMaxRows.ToString()
  bookingObj.GetMaxCols.ToString()

  lblTotal.Text = txtNumOfRows.Text * txtNumOfSeats.Text
 End Sub


 ''' <summary>
 ''' Event-handler for the double-click event.
  ''' Reserve/cancel the seat chosen in the listbox (call   bookingObj.SetRowAndCOlumnValue),
 ''' only if the showOption is Show ALL; otherwise, give an error message and do nothing.
''' </summary>
''' <param name="sender">sender-object from the caller</param>
''' <param name="e">EventArgs object from the caller</param>
''' <remarks></remarks>
Private Sub lstUnits_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstUnits.DoubleClick

  lblNumVacants.Text = lblTotal.Text - 1
  Return
End Sub

''' <summary>
''' Event-handler method for change in the radiobutton
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
 Private Sub rbtnLetters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtnLetters.CheckedChanged
   UpdateResults()
   Dim A As Integer = 65
    Dim myChar As Char
   Dim col As Integer = 0
   myChar = Convert.ToChar((A + col))

 End Sub

 Private Sub UpdateUnit()
  'Dim strText As String = bookingObj.GetUnitName(cmbUnitType.SelectedIndex)
  ' lblVacantUnits.Text
 End Sub
End Class

然后是SeatBook类:

'Created by: Hans Elias Juneby
'Started: July 10, 2010 Completed July 0, 2010

Public Class SeatBooking

Private array As Double()    'Declaration of the array 
Private lastIndex As Integer = 0    'last filled position (lastIndex+1 = number of items 

'''<summary>
''' Create (or recreate) the matrix with the given size
''' </summary>
'''<param name="rowSize">Number of rows</param>
''' <param name="colSize">Number of columns</param>
'''<remarks></remarks>
Public Sub CreateArray(ByVal rowSize As Integer, ByVal colSize As Integer)
   Debug.Assert(rowSize >= 0)      'Program execution halts here in case size is <0; 
   array = New Double(rowSize - 1) {}
  Debug.Assert(colSize >= 0)      'Program execution halts here in case size is <0; 
  array = New Double(colSize - 1) {}
  Dim seatMatrix As Boolean(,)
  seatMatrix = New Boolean(rowSize, colSize) {}



  End Sub
'''<summary>
''' Calculate the total number of elements(row*col)
''' </summary>
'''<returns>The total number of elements</returns>
'''<remarks></remarks>
Public Function GetMaxCount() As Integer

End Function

'''<summary>
''' Check if a seat in a specific row and column is reserved.
''' </summary>
'''<param name="row">given row</param>
'''<param name="col">given col</param>
'''<returns>True if the seat is reserved and false otherwise</returns>
'''<remarks></remarks>
Public Function IsReserved(ByVal row As Integer, ByVal col As Integer)

End Function

'''<summary>
''' Make a new reservation or cancel an existing. This process is onde by
''' reversing the boolean value in the given position in the matrix, from true to 
''' false (reverse the seat) or vice versa(Cancel the reservation)
''' </summary>
'''<param name="row">given row</param>
'''<param name="col">given col</param>
'''<remarks></remarks>
Public Sub Reserve(ByVal row As Integer, ByVal col As Integer)

End Sub


'''<summary>
''' Thenumber of rows in the Matrix
''' </summary>
''' <returns>The number of rows</returns>
''' <remarks></remarks>
Public Function GetMaxRows() As Integer
   Dim colsize As Integer = MainFrame.txtNumOfSeats.Text
   Dim rowsize As Integer = MainFrame.txtNumOfRows.Text



  CreateArray(colsize, rowsize)

  For i As Integer = 0 To array.Length - 1

     MainFrame.lstUnits.Items.Add("----" & i & "---" & GetMaxCols.ToString.Length)
  Next
End Function

'''<summary>
''' Thenumber of columns in the Matrix
''' </summary>
''' <returns>The number of columns</returns>
''' <remarks></remarks>
Public Function GetMaxCols() As Integer
   Dim colsize As Integer = MainFrame.txtNumOfSeats.Text
  Dim rowsize As Integer = MainFrame.txtNumOfRows.Text

  CreateArray(rowsize, colsize)

  For h As Integer = 0 To array.Length - 1

  Next

End Function

'''<summary>
''' The method first finds the first vacant pos in the matrix (row, col)
''' and then calls another method MatrixIndexToVectorialIndex that determines which
''' position the element has if the matrix was rolled out into a one-dimensional
''' array. In a 3x3 matrix, the element in position (1,1) has an index 4 in
''' one-dimensional array. The method is useful when updating the listbox in the
''' GUI which contains a one-dimensional array of strings. The method determines which
''' position (row,col) in the matrix corresponds to an item (row) in the listbox.
'''  </summary>
'''<returns>The index, considering the matrix as one long vector, to the first vacant
''' position ( the first False value). A value -1 is returned if no vacant element is
''' found</returns>
'''<remarks></remarks>
Public Function GetFirstVacantPosition() As Integer

End Function

''' <summary>
''' Determine a corresponding index for an element at (row,col) in a one-dimensional
''' presentation of the matrix. Think of the matrix as beeing rolled out into a one-dim
''' array. In a 3x3 matrix, the element in position (1,1) has an index 4 in
''' one-dimensional array.
'''        20  11  22
'''        33  41  55
'''        60  7   99   Consider value (1,1)=41
''' The above matrix can now be represented as one dimensional array. This makes it
''' easier to update the listbox in the GUI.
'''        20  11  22  33  41  55  60   7   99    value(4)=41
'''  Index  0   1   2   3   4   5   6   7   8
'''Hence, index (1,1) in the matrix corresponds to row 4 in the listbox (one-dim array)
''' </summary>
''' <param name="row"></param>
''' <param name="col"></param>
''' <returns>The new index as explained above</returns>
''' <remarks></remarks>
Public Function MatrixIndexToVectorIndex(ByVal row As Integer, ByVal col As Integer)  

End Function

 ''' <summary>
''' Determines the index in the matrix (row,col) that corresponds to a given 
 ''' index in a one-dim array (listbox). This method actually is reverse process of
''' the method MatrixIndexToVectorIndex (see above). The parameter row contains
''' the input, i.e. index of the element in a one-dim array. The results (row and col)
''' are saved and sent back to the caller via the ref variables row,col.
''' </summary>
''' <param name="row">Input and output parameter</param>
''' <param name="col">Output parameter</param>
''' <remarks></remarks>
Public Sub VectorIndexToMatrixIndex(ByRef row As Integer, ByRef col As Integer)

End Sub

''' <summary>
''' This function receives an index in a one-dim array (e.g. listbox) and calls 
''' the method VectorIndexToMatrixIndex to fin the same position in the matrix.
''' It then calls the function Reserve to either reserve or cancel a booking.
''' (If False value is saved in the element, it reserves the seat by changing
''' the value to True, and vice-versa).
''' </summary>
''' <param name="oneDimListIndex"></param>
''' <remarks></remarks>
Public Sub SetRowAndColumnValue(ByVal oneDimListIndex As Integer) 

End Sub

''' <summary>
''' Calculate the total number of the reserved seats, i.e. the total
''' number of the True values in the matrix.
''' </summary>
''' <returns>Number of reserved seats</returns>
''' <remarks></remarks>
Public Function GetNumOfReservedSeats() As Integer 

End Function

''' <summary>
''' Calculate the total number of the vacant seats, i.e the total
''' number of the False values in the matrix.        
''' </summary>
''' <returns>number of vacant seats</returns>
''' <remarks></remarks>
Public Function GetNumOfVacantSeats() As Integer

End Function

''' <summary>
''' Relation between the reserved seats and the total number of seats in percent.
''' </summary>
''' <returns>Percent of Reservation</returns>
''' <remarks></remarks>
Public Function PercentOfReservation() As Double

End Function
End Class

2 个答案:

答案 0 :(得分:1)

就我个人而言,我宁愿使用哈希表来完成这项任务[个人对速度的偏好],但是你需要根据你的项目规范使用二维数组或矩阵,通过使用2可能更容易实现这一点。布尔

类型的维数组
Dim ReservationArray(NumRows - 1, NumColumns - 1) as Boolean

这些值将默认为false,表示座位空置并保留座位,只需将此值更改为true

在我欢迎查看编码并根据您的需要进行修改时,我正在学习的课程基本上完成了同一个项目

您可以从以下链接下载我的项目(Visual Studio 2008项目)

我们的项目之间的一个很大区别是使用datagridview而不是listbox :)看看这如何简化你的任务

Reservation_Project.zip

答案 1 :(得分:0)

如何更改项目中每个新行的输出,这意味着我是否希望每个新行都包含额外的“------”? 此外,如果你有选项严格的代码 Dim ColInt As Integer = Char.ConvertToUtf32(dgvwResults.Rows(e.RowIndex).Cells(“Column”)。Value,0) - 65 失败? 还没有能够解决它。

亲切的问候

Geera

相关问题