摘自 Go编程入门,第91页,练习问题4,主题:函数:
编写具有一个可变参数的函数,该函数可以在数字列表中找到最大的数字?
到目前为止,我已经编写了这段代码,但是它显示了错误
package main
import (
"fmt"
)
func findMaximum(args ...[]int) []int {
max := args[0]
for _, v := range args {
if v > []args {
max = v
}
}
return args
}
func main() {
x := []int{
48, 96, 86, 68,
57, 82, 63, 70,
37, 34, 83, 27,
19, 97, 9, 17,
}
fmt.Println(findMaximum(x))
}
我已经从该计划中获得了参考
(第75页,问题编号-4,主题:数组,切片和映射)
编写一个找到最小数字的程序 在此列表中:
x := []int{
48,96,86,68,
57,82,63,70,
37,34,83,27,
19,97, 9,17,
}
这是我为解决此问题而编写的程序
package main
import "fmt"
func main() {
arr := []uint{
48, 96, 86, 68,
57, 82, 63, 70,
37, 34, 83, 27,
19, 97, 9, 17,
}
min := arr[0] // assume first value is smallest
for _, value := range arr {
if value < min {
min = value // found another value, replace previous value of min
}
}
fmt.Println("The smallest value is : ", min)
}
此问题程序正在运行,但第一个不是,我不知道为什么。
答案 0 :(得分:0)
如果您通过https://play.golang.org/运行代码,则会看到一些语法错误。以下是在切片中找到max的正确版本。
您会注意到,切片参数调用中有额外的...
。
package main
import (
"fmt"
)
func findMaximum(args []int) int {
max := args[0]
for _, v := range args {
if v > max{
max = v
}
}
return max
}
func main() {
x := []int{
48, 96, 86, 68,
57, 82, 63, 70,
37, 34, 83, 27,
19, 97, 9, 17,
}
fmt.Println(findMaximum(x))
}
答案 1 :(得分:0)
在数学和计算机编程中,可变函数是 不确定不确定性的功能,即接受变量的功能 参数数量。
来源:Wikipedia
您的函数签名有点不正确。
func findMaximum(args ...[]int) []int
这表示findMaximum
以可变数量的int
片作为参数,并返回int
片。您要解决的问题是要求输入可变数量的int
参数并返回一个奇数int
,这是所提供的集合中最大的。
调用函数看起来像这样:
largest := findMaximum([]int{1, 2, 3}, []int{4, 5, 6}, []int{7, 8, 9})
在这种情况下,largest
的类型为[]int
,指示函数以片的形式返回了多个int
值。这没有任何意义,因为应该只有一个一个最大值(假设没有重复项)。
您想要一个看起来像这样的函数签名:
func findMaximum(args ...int) int
调用此函数将如下所示:
largest := findMaximum(1, 2, 3, 4, 5, 6, 7, 8, 9)
...或者如果您将数字放在一个切片中:
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
largest := findMaximum(nums...)
在这种情况下,largest
的类型为int
,这是您在此问题中寻找的正确返回值。
祝你好运!