Является ли этот код правильным кодом для этой задачи? - PullRequest
0 голосов
/ 29 октября 2019

Создайте функцию с именем swapped, которая возьмет два целых числа (a, b) с именем byref и вернет логическое значение true, если числа поменялись местами. В рамках процедуры сравните числа и, если b> поменять их местными переменными temp, верните значение true, иначе верните значение false.

Function swapped(ByRef a As Boolean, ByRef b As Boolean)
    a = True
    b = True
    If b > a Then
        temp = b
        b = a
        a = temp
        a = True
        b = True
    Else
        a = False
        b = False
    End If

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Вот фиксированный пример. У вас должны быть параметры, объявленные как целые числа вместо логических. Сама функция должна быть объявлена ​​как логическое значение

Function swapped(ByRef a As Integer, ByRef b As Integer) As Boolean

    If b > a Then
       'Declare the temp variable
        Dim temp As Integer = b

       'Change b to a
        b = a
       'Set 'a' equal to the temp variable from the original b
        a = temp

        Return True

    Else
        Return False

    End If
End Function

Public Sub test()
    Dim intA As Integer
    Dim intB As Integer
    intA = 1
    intB = 2
    'Test b>a
    'Should return True
    Dim check As Boolean
    check = swapped(intA, intB)

    'Test Not(b>a)
    'Should return False
    Dim checkfalse As Boolean
    checkfalse = swapped(2, 2)
End Sub
1 голос
/ 29 октября 2019

Сначала давайте посмотрим на ваш код.

'The requirements called for 2 Integers, not Booleans.
'A Function requires a datatype, in this can a Boolean
Private Function swapped(ByRef a As Boolean, ByRef b As Boolean)
    'Assigning values here will overwrite the passed in values
    a = True
    b = True
    'What would it mean for True > True ??
    If b > a Then
        'temp isn't declared so this will not compile
        temp = b
        'here I think you are trying to do the swap
        'but all the values are True
        b = a
        a = temp
        a = True
        b = True
    Else
        a = False
        b = False

    End If
    'Function need a return value to match the datatype of the function
    'It is preceded by Return
End Function

Если вы работаете в Visual Studio (бесплатно для загрузки), некоторые из этих ошибок будут выделены для вас.

Сейчасдавайте рассмотрим некоторый код, который может выполнить вашу задачу.

'Through comments you have already figured out that a and b are Integers
'In addition, Functions always need a return type. In this case a Boolean
    Function swapped(ByRef a As Integer, ByRef b As Integer) As Boolean
    'The values of a and b are passed to the function.
    'Keep the passed in value of a in a new variable
    If b > a Then
        Dim aPassedInValue = a
        'assign the value of b to a
        a = b
        'now assign the original value of a to b
        'we can't use a because we just changed the value of a in the above line
        b = aPassedInValue
        'There have been no errors so we can return True
        Return True
    Else 'We didn't swap them
        Return False
    End If
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim c As Integer = 7
    Dim d As Integer = 20
    MessageBox.Show($"c = {c}, d = {d}", "Before Swap")
    Dim ReturnValue = swapped(c, d)
    MessageBox.Show($"The return value of the swapped Function is {ReturnValue}")
    MessageBox.Show($"c = {c}, d = {d}", "After Swap")
End Sub

Я думаю, цель этого упражнения - продемонстрировать ByRef. Вы изменили значения в функции, и новые значения отражаются в переменной в Button.Click Sub.

0 голосов
/ 30 октября 2019

Оба существующих ответа делают свое дело. Вот один без временной переменной

Private Function swapped(ByRef a As Integer, ByRef b As Integer) As Boolean
    If b > a Then
        a = a + b
        b = a - b
        a = a - b
        Return True
    End If
    Return False
End Function

Sub Main()
    Dim a = 10
    Dim b = 11
    Console.WriteLine($"a: {a}, b: {b}")
    Console.WriteLine($"values were{If(swapped(a, b), " ", " not ")}swapped.")
    Console.WriteLine($"a: {a}, b: {b}")
    Console.ReadLine()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...