英文:
non-declaration statement outside function body error in GO
问题
我是一个新学习者,正在学习Go语言,这些问题让我很困惑。我无法解决它们,你们能帮我一下吗?
func Solution(A []int, B []int, K int) int {
    .......
    res = MaxInt32 
    low = 0
    high = Min(900, largestId) //largestId在这里有限制
    mid = 0
    for low <= high {
        mid = (low + high) / 2
        if isAvailable(K, mid) {
            res = Min(res, mid)
            high = mid - 1
        } else {
            low = mid + 1
        }
    }
    return res
}
错误显示为:
workspace/src/solution/solution.go:55: 语法错误: 意外的 =,期望 }
workspace/src/solution/solution.go:64: 非声明语句在函数体外
workspace/src/solution/solution.go:65: 语法错误: 意外的 }
我不明白为什么会出现这些问题?
英文:
I am a new learner with Go, and these problems confused me a lot. I cannot solve them, could you guys give me a hand?
func Solution(A []int, B[]int, K int) int{
.......
res = MaxInt32 
low = 0
high = Min(900, largestId) //largestId is limited here
mid = 0
while(low <= high){
	mid = {low + high} / 2         55
	if(isAvailable(K, mid)){
		res := Min(res, mid)
		high :=mid - 1
	} else{
		low := mid + 1
	}
	
}
return res                         64
}                                  65
The errors show:
workspace/src/solution/solution.go:55: syntax error: unexpected =, expecting }
workspace/src/solution/solution.go:64: non-declaration statement outside function body
workspace/src/solution/solution.go:65: syntax error: unexpected }
I don't understand why these problems come?
答案1
得分: 2
在Go语言中没有while循环,只有for循环。如果我这样写:
package main
func main() {
    var n int
    while (n < 10) {
        n++
    }
    return
}
我会得到类似于你的错误信息:
untitled 3:6: syntax error: unexpected ++, expecting }
untitled 3:8: non-declaration statement outside function body
untitled 3:9: syntax error: unexpected }
如果我将 while n < 10(去掉括号)这样写,我会得到更精确的错误信息,即在第5行(while)上出现了一个“意外的名称”错误。我认为由于括号的使用,编译器将(非保留字)while 视为类型(函数调用或类型转换),但在意识到它不存在之前,还有其他错误要报告。因此,也许对你来说这是一个令人困惑的消息。
除非你的代码中还有其他错误,将 while 重命名为 for 应该可以解决问题。并且去掉括号。
英文:
There's no while loop in Go. Only for. If I do this:
package main
func main() {
	var n int
	while (n < 10) {
		n++
	}
	return
}
I get the following error (similar to yours):
untitled 3:6: syntax error: unexpected ++, expecting }
untitled 3:8: non-declaration statement outside function body
untitled 3:9: syntax error: unexpected }
If I do while n < 10 (no parentheses) I get more precise message, i.e. an unexpected name error on line 5 (while). I believe due to a bracket usage compiler treats (non-reserved word) while as a type (function call or type conversion), but before realising it's non-existent there are other errors to report. Hence, maybe, a confusing message for you.
Unless you have other errors in your code, renaming while to for should work. And drop the brackets.
答案2
得分: 0
例如,
package main
import (
	"math"
)
func Min(a, b int) int {
	if a > b {
		return b
	}
	return a
}
func isAvailable(k, mid int) bool {
	// ...
	return true
}
func Solution(A []int, B []int, K int) int {
	largestId := 0
	// ...
	res := math.MaxInt32
	low := 0
	high := Min(900, largestId)
	for low <= high {
		mid := (low + high) / 2
		if isAvailable(K, mid) {
			res = Min(res, mid)
			high = mid - 1
		} else {
			low = mid + 1
		}
	}
	return res
}
func main() {}
你需要学习基本的Go语法。参考Go之旅。
英文:
For example,
package main
import (
	"math"
)
func Min(a, b int) int {
	if a > b {
		return b
	}
	return a
}
func isAvailable(k, mid int) bool {
	// ...
	return true
}
func Solution(A []int, B []int, K int) int {
	largestId := 0
	// ...
	res := math.MaxInt32
	low := 0
	high := Min(900, largestId)
	for low <= high {
		mid := (low + high) / 2
		if isAvailable(K, mid) {
			res = Min(res, mid)
			high = mid - 1
		} else {
			low = mid + 1
		}
	}
	return res
}
func main() {}
You need to learn basic Go syntax. Take the Go Tour.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论