在以下教程的示例代码中,我了解其中的大多数是如何工作的。但是有一些我不理解的事情。请帮助我理解其中一些角色的目的和目的。我将在下面解释我不理解的内容。
Module paramByref
Sub swap(ByRef x As Integer, ByRef y As Integer)
Dim temp As Integer
temp = x ' save the value of x
x = y ' put y into x
y = temp 'put temp into y
End Sub
Sub Main()
' local variable definition
Dim a As Integer = 100
Dim b As Integer = 200
Console.WriteLine("Before swap, value of a : {0}", a)
Console.WriteLine("Before swap, value of b : {0}", b)
' calling a function to swap the values '
swap(a, b)
Console.WriteLine("After swap, value of a : {0}", a)
Console.WriteLine("After swap, value of b : {0}", b)
Console.ReadLine()
End Sub
End Module
我不明白为什么需要x
,y
和temp
。为什么不保持a
和b
的声明并交换值?
此外,在Console.WriteLine
上,我了解{0}
是第n个引用或索引位置,但逗号建议输出其他内容。它是说要在0索引中输出a的值吗?如果是这样,只能有一个零索引,为什么下一行引用零索引的值?或者我错了吗?非常感谢任何解释......请为这个新手愚蠢地回答你的问题。
答案 0 :(得分:1)
x
,y
和temp
的原因是为了演示如何进行交换。你的问题是
为什么不保持声明a和b并交换值
在这种情况下,你没有进行任何递增,确定你可以在之后说b = 100
和a = 200
,但如果你这样做,就说一个循环并不断交换它们,如果你要做什么
a = b
b = a
你会a=100
,b=100
,因为你将b = a
的值设置为100,然后将其设置为相同的值,使其仍然为100.这就是' s为什么你需要临时值。
关于console.writeLine,你绝对正确它是索引第0个索引,所以在第一个例子中,它是a,但它可以在下一行重用,因为它是一个完全独立的行代码这些console.writeLines中的每一个都可以独立存在,因此这些值是逐行索引的
答案 1 :(得分:0)
你需要一个temp来存储第一个var中的值,这样当你用第二个var的值覆盖它时你就不会丢失它。一旦第二个var的值被转移到第一个var中,temp中存储的值(来自原始的第一个var)就可以转移到第二个var中(覆盖原始值)。
这是创建自定义排序例程时的常用方法,该例程将各个位置的值混洗并在数组中排名。
答案 2 :(得分:0)
a
和b
是仅在方法Main()
中可见的变量。无法从其他方法访问它们。另一方面,x
,y
和temp
是仅在方法swap()
中可见的变量。更准确地说,x
和y
是方法的参数。关键字ByRef
表示参数是对变量的引用。即当您致电swap(a, b)
时,x
成为对变量a
的引用,y
成为对变量b
的引用。您可以使用与其他变量一样的引用。不同之处在于,当您更改x
中的swap()
时,a
中的Main
会相应更改。
Console.WriteLine()
方法采用字符串参数和任意数量的附加参数。 {0}
是这些附加参数列表的索引。例如。 Console.WriteLine("{0} {1} {2}", 100, 200, 300)
会输出100 200 300
。并Console.WriteLine("{2} {1} {0}", 100, 200, 300)
会输出300 200 100
。