Go 如何检查没有for循环的数组中是否存在元素?
我正在做一个挑战,在这个挑战中,我不能对循环使用Go 如何检查没有for循环的数组中是否存在元素?,go,Go,我正在做一个挑战,在这个挑战中,我不能对循环使用,所以我使用goto语句来实现它 基本上我得到的是一个正数数组,所以像-1这样的负数需要消除。但通过这样做,我的数组长度会缩短,因此,在检查循环是否结束的下一轮中,我会收到索引超出范围 我正在寻找一种方法来确定下一个元素是否存在,如果不存在,停止程序 我的代码: func main() { fmt.Println("Please enter number of test cases: ") scanner :=
,所以我使用goto
语句来实现它
基本上我得到的是一个正数数组,所以像-1
这样的负数需要消除。但通过这样做,我的数组长度会缩短,因此,在检查循环是否结束的下一轮中,我会收到索引超出范围
我正在寻找一种方法来确定下一个元素是否存在,如果不存在,停止程序
我的代码:
func main() {
fmt.Println("Please enter number of test cases: ")
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
testCasesNumberInput := scanner.Text()
testCaseNumber, _ := strconv.Atoi(testCasesNumberInput)
if testCaseNumber <= 0 {
fmt.Print("Number of test cases must be higher or equal to 1")
return
}
fmt.Println("Please enter test cases: ")
scanner.Scan()
scannerText := scanner.Text()
input := strings.Fields(scannerText)
testCases := make([]int, len(input))
if len(testCases) != testCaseNumber {
fmt.Print("Wrong number of test cases!")
return
}
inputIndex := 0
outputIndex := 0
var intInput int
start:
if inputIndex < len(testCases) {
intInput, _ = strconv.Atoi(input[inputIndex])
testCases[inputIndex] = intInput
inputIndex++
goto start
}
goto prepareResult
prepareResult:
if outputIndex > len(testCases) {
fmt.Print("result: \n", testCases)
return
}
if testCases[outputIndex] <= 0 {
copy(testCases[outputIndex:], testCases[outputIndex+1:])
testCases[len(testCases)-1] = 0
testCases = testCases[:len(testCases)-1]
if outputIndex == 0 {
if len(testCases) < outputIndex+2 {
fmt.Print("")
return
}
} else {
if len(testCases) < outputIndex {
fmt.Print("")
return
}
}
}
outputIndex++
goto prepareResult
}
func main(){
fmt.Println(“请输入测试用例数:”)
扫描仪:=bufio.NewScanner(os.Stdin)
scanner.Scan()
testCasesNumberInput:=scanner.Text()
testCaseNumber,:=strconv.Atoi(testCasesNumberInput)
如果测试用例编号为len(测试用例){
打印(“结果:\n”,测试用例)
返回
}
如果testCases[outputIndex]您需要做的就是:
删除正在检查testCases[outputIndex]的if和else语句,只需执行以下操作:
删除正在检查testCases[outputIndex]的if和else语句为什么不在挑战中使用递归呢?能否在循环结束时缩短测试用例一次,而不是每次迭代?@gonutz我认为禁止循环的原因是强调golang的能力而不是标准方法。@MarkPlotnick请您提供有关ide的更多信息a?看起来像是一个简单的一目了然的错误:如果outputIndex>=len(testCases){return}
@Peter长度实际上是正确的……如果测试用例的长度是5,我们从中删除2个元素,outputIndex是3,那么outputIndex==len(testCases)
但是没有测试用例[outputIndex]
,所以索引超出范围
你为什么不在你的挑战中使用递归呢?你能在循环结束时缩短测试用例一次,而不是每次迭代吗?@gonutz我认为禁止循环的原因是强调golang能力而不是标准方法。@MarkPlotnick请提供更多关于您想法的信息?看起来像是一个简单的一错再错:如果outputIndex>=len(testCases){return}
@Peter长度实际上是正确的…如果测试用例的长度是5,我们从中删除2个元素,outputIndex是3,那么outputIndex==len(testCases)
但是没有测试用例[outputIndex]
,所以索引超出范围