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]
    ,所以
    索引超出范围