control de bucle
-
Mientras que la ausencia y hacer ... mientras que el lenguaje Golang, no sólo para, por puede reemplazar el formato bucle while, o continuar a través de la adición de descanso fuera del circuito.
-
para el formato básico:
for \<循环变量初始化>;<循环条件>;<循环变量迭代> { \<循环体> }
Ejemplo 1:
for i := 1 ; i < = 10 ; i++ { \<循环体> }
Ejemplo 2:
var i int = 1 for i ; i < = 10 ; i++ { \<循环体> }
Ejemplo 3:
for { //实际上等同于 for ; ; {...},也就是 for <空值>;<空值>;<空值> {...} var i int = 1 if i <= 10 { \<执行语句> } else { break } i++ } //等同于实现了while功能。
-
Tenga en cuenta que si la variable de bucle i define independientemente el uno del otro, entonces sólo apenas dentro del bucle, el archivo de código contiene una pluralidad de los ámbitos para i ...
Ejemplo 1:for i := 1 ; i <= 10 ; i++ { \<循环体> } fmt.Println("i的值为: ",i) //这个编译会报错,因为i只处于循环体作用域,下面全局变量的"i"根本不存在
Ejemplo 2:
i := 1 for ; i <= 10 ; i++ { \<循环体> } fmt.Println("i的值为: ",i) //这个编译就没有问题了,因为变量在循环体外,作用域是main函数体。
-
Atravesando cadena, cada cadena de caracteres extraída, utilizando el recorrido de bytes por defecto pasar a través de, por lo que para la codificación de caracteres utf8 tres bytes después de la división ilegible
Python similares, caracteres de la cadena se pueden usar string [i ] de la forma sujeto a extraer, a través de los tres ejemplos siguientes muestran puntos:
ejemplo 1:var str string = "Oh!shit!" //标准英文字符串 for i := 0 ; i <= len(str) ; i++ { fmt.Printf("%c",str[i]) } //因为循环是按照byte遍历,所以标准ascii编码的都没有问题,但是如果存在汉字,那么就出现乱码
Ejemplo 2:
var dest string = "oh!shit!踩到狗屎了" //包含中文了 str := []rune(dest) for i := 0; i <= len(str) ; i++ { fmt.Printf("%v\n",str[i]) } //使用切片后,按照字符遍历了。使用切片方式结果正确,但是报错 //panic: runtime error: index out of range待解决
Ejemplo 3: Utilización de la gama, es más recomendable este método
var str1 string = "oh!shit!又踩到狗屎了" //一般会有一个index和value配合使用,在此直接用下划线_忽略,index为索引 for _ , value := range str1 { fmt.Printf("%c\n",value) }
-
Caso: todo de impresión entre 1 y 100 es un múltiplo entero de 9, y estos enteros y
package main import "fmt" func main() { var i int = 1 var sum int for ; i <= 100 ; i++ { if i % 9 == 0 { fmt.Printf("%v\t",i) sum += i } } fmt.Println() fmt.Printf("这些数的总和为:%v",sum) }
-
Caso: Imprima el siguiente formato + 6 = 0 61 + 5 = 6 + 0 = 6 ... 6 son salto de línea
package main import "fmt" func main() { for i := 0 ; i <= 6 ; i++ { fmt.Printf("%d + %d = 6\n",i,6-i) } }
-
bucle anidado: recomendaciones contener hasta dos anidada lógica, o demasiado complejo, si el bucle de n veces, el bucle de m veces exteriores, n veces de modo que realiza m veces *
caso: dota2 los cuatro equipos de Ti: og, por ejemplo, valor de la capacidad LGD, alas, cinco jugadores de cada equipo, cada entrada (0 a 99), cada equipo a encontrar valores promedio y el valor de la capacidad de la capacidad promedio de cuatro clanespackage main import "fmt" func main() { /* 需求:Ti中4个dota2战队:og,eg,lgd,wings,每个战队五名队员,输入每个人的能力值(0~99)。 求每个战队的平均能力值以及四个战队的平均能力值。 需求分析: 目前尚不知道Golang列表循环咋整,因为按照教程没学到!做映射吧也不知道咋做,干脆战队1234吧 只要求出每个战队平均能力值,相加之后除以便是四个战队总平均能力值 两层嵌套已经很费劲了,稍微不注意就会出错,代码如下 */ var totalSum float64 for j := 1 ; j <= 4 ; j++ { var memAbil float64 var teamSum float64 var teamAvg float64 for i := 1; i <= 5; i++ { fmt.Printf("请输入战队%d的第%d名成员的能力值: \n",j,i) fmt.Scanf("%v",&memAbil) teamSum += memAbil teamAvg = teamSum / 5 } fmt.Printf("战队%d的平均能力值为:%f\n",j,teamAvg) totalSum += teamAvg } fmt.Printf("四支战队总的平均能力值为:%f",totalSum / 4) }
-
Caso: 99 tablas de multiplicar de impresión (clásico problema)
package main import "fmt" func main() { /* 需求:99乘法表 1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 需求分析: 两层循环,分别用变量i,j表示 打印肯定是 fmt.Printf("%d * %d = %d") 具体分析三个%d应该对应哪些变量 变量定义在main()中,不要直接定义在for循环作用域中 */ var j int var i int var num int fmt.Println("请输入乘数的最大值:") fmt.Scanf("%d",&num) fmt.Println("乘法表结果如下: ") for j = 1 ; j <= num ; j++ { for i = 1; i <= j; i++ { fmt.Printf("%d * %d = %d\t", i,j,i*j ) } fmt.Println() } }