在二维数组中搜索

Search in a two-dimensional array

我试图在数组的不同点中找到值。当我 运行 代码时,它总是转到 The value doesn't exists,而且我不知道如何计算相同的值 r

    r = 0 
    c = txtbbus.Text
    For i = 0 To n - 1
        For j = 0 To n - 1
            If a(i, j) = c Then
                txtbres.Text = "The value exists " & r & " and it's in the position (" & i & ", " & j & ") "
            Else
                txtbres.Text = "The value doesn't exists"
            End If
        Next j
    Next i

这就是我初始化的方式 a:

    txtbmatriz.Text = ""
    For i = 0 To n - 1
        For j = 0 To n - 1
            a(i, j) = CInt((100 * Rnd()) + 1)
            txtbmatriz.Text += a(i, j) & " "
            m += a(i, j)
            l += 1
        Next j
        txtbmatriz.Text += vbCrLf
    Next i

问题几乎可以肯定是您在找到匹配项时没有跳出循环。您的代码只会向您显示数组中最后一个元素的结果,因为您始终会搜索到最后一个元素。一旦找到匹配项,就没有必要进一步查找,事实上,这样做是有害的。找到匹配项后,请停止查找。

找到 single/first 匹配项:

Dim rng As New Random
Dim matrix = New Integer(9, 9) {}

For i = 0 To matrix.GetUpperBound(0)
    For j = 0 To matrix.GetUpperBound(1)
        matrix(i, j) = rng.Next(1, 101)
    Next
Next

Dim target = rng.Next(1, 101)
Dim message As String

For i = 0 To matrix.GetUpperBound(0)
    For j = 0 To matrix.GetUpperBound(1)
        If matrix(i, j) = target Then
            message = $"{target} found at ({i},{j})"
            Exit For
        End If
    Next

    If message IsNot Nothing Then
        Exit For
    End If
Next

Console.WriteLine(If(message, $"{target} not found"))

查找所有匹配项:

Dim rng As New Random
Dim matrix = New Integer(9, 9) {}

For i = 0 To matrix.GetUpperBound(0)
    For j = 0 To matrix.GetUpperBound(1)
        matrix(i, j) = rng.Next(1, 101)
    Next
Next

Dim target = rng.Next(1, 101)
Dim matches As New List(Of String)

For i = 0 To matrix.GetUpperBound(0)
    For j = 0 To matrix.GetUpperBound(1)
        If matrix(i, j) = target Then
            matches.Add($"({i},{j})")
        End If
    Next
Next

Console.WriteLine(If(matches.Any(),
                     $"{target} found at {String.Join(", ", matches)}",
                     $"{target} not found"))

我假设 c = txtbbus.Text 来自某种形式的输入。意思是一个字符串。对于相等性检查,您将针对 Int 类型进行测试。尝试将来自 txtbbus.Text 的输入转换为整数。另外,就像其他发帖人说的那样,在寻找匹配项时打破循环也是一个不错的决定。

试试这个:

    r = 0
    c = txtbbus.Text
    Dim i As Integer
    Dim j As Integer
    Dim FoundMatch As Boolean = False

    For i = 0 To n - 1
        For j = 0 To n - 1
            If a(i, j) = c Then
                FoundMatch = True

                Exit For
            End If
        Next j
        If FoundMatch = True Then
            Exit For
        End If
    Next i
    If FoundMatch = True Then
        txtbres.Text = "The value exists " & r & " and it's in the position (" & i & ", " & j & ") "
    Else
        txtbres.Text = "The value doesn't exists"
    End If