数组也可以像变量一样,作为参数传递给函数,用法如下:
注意:在main( )函数中,定义数组a, 然后调用modify( )方法传递数组,同时在modify( )方法中修改数组中第一个元素。最终输出结果发现,并不会影响main( )函数中数组a的值,这一点与其它编程语言是有区别的。
练习1:用方法来实现:有一个字符串数组: { “马龙”, “迈克尔乔丹”, “雷吉米勒”, “蒂姆邓肯”, “科比布莱恩特” },请输出最长的字符串。
思路:1:在main( )函数中定义该数组,并且传递到GetLongest( )方法中
2:定义一个max变量用来存储最长的字符串,并且假设数组中的第一个元素是最长的。
3:通过循环,将数组中的元素取出来与max变量进行比较,如果长度比max变量中存储的长度要长,赋值给max
4:将结果返回
练习2:用方法来实现:请计算出一个整型数组的平均值。保留两位小数
思路:该题主要是通过循环的方式,将数组中的每个元素取出来进行累加,最后求平均数。注意输出格式
练习4:在上一题中,计算整型数组中的平均值,这个数组中的元素都是固定死的,如果将需求修改成数组中的3个元素是随机生成的,应该怎样进行处理?这就涉及到随机数的知识:随机数,可以理解成让计算机随机生成的一组数字。
在GO语言中,产生随机数的语法如下:
要产生随机数,还需要导入“math/rand”包,
rand.Seed(123),设置随机种子,由于随机种子是固定的,所以运行该程序,发现每次生成的随机数是一样的。
所谓的随机种子:随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。
为了解决这个问题,可以让随机种子随时发生变化,所以可以利用时间来作为随机种子。 如果用时间来做随机种子,需要导入“time”包。
rand.Int( );每次产生的整型随机数都非常的大,所以可以限制范围,使用的是rand中的Intn( )方法。例如:rand.Intn(100),限制100内的随机数。
最终程序可以进行如下的修改:
最终,完整代码如下,该程序中涉及到了数组,函数嵌套调用,随机数等知识。通过该程序,体会出函数的一个很重要的优势,职责明确,RandomFunc( )函数是负责产生随机数,GetAvg( )负责对产生的数据进行计算。
练习4:用函数实现字符串数组{ “中国”, “美国”, “巴西”, “澳大利亚”, “加拿大” }中的内容反转,并在主函数(main( ))中,输出反转的结果。
注意:该程序中定义的函数,返回的是数组。
练习5:完成两个数组中元素的比较,判断其相同下标对应的元素是否完全一致。例如:a := [5]int{1, 2, 3, 4, 5}与b:= [3]int{1, 2, 3}进行比较,判断其数组元素是否完全一致。
思路:1:可以先计算出数组a和数组b的长度,如果长度不一致,数组肯定不一致。
2:如果长度一致,可以通过循环将每个数组中元素取出来,进行比较。如果有一个元素不一致就退出循环。
那么上面举例的 a数组与b数组中的元素肯定不一致,因为长度不一致。
如果将数组b修改成b:=[5]int{1,2,3}, 是否一致呢?不一致,虽然长度相等,但是b[3]和b[4]都是0,元素不一致。
如果将数组b修改成b:=[5]int{5,1,2,3,4} 是否一致呢?不一致,因为a[0]是1,而b[0]是5.
根据以上分析的思路,代码案例如下:在main( )函数中定义如下代码:
在上面的代码中,重点体会continue和break的用法。
虽然以上代码能够满足需求,但是问题是比较麻烦,GO语言中提供了另外一种方式进行比较,
直接使用“==”或”!=”进行比较。但是具体的要求是:
1:只支持 == 或 !=, 比较是不是每一个元素都一样
2:两个数组比较,数组类型要一样
除了可以进行比较以外,同类型的数组可以赋值
var d [5]int
d = a
fmt.Println(“d = “, d)