第03天(复合类型)_04
2019-12-11 本文已影响0人
lucas777
18_切片和底层数组关系.go
package main //必须有个main包
import "fmt"
func main() {
a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
//新切片
s1 := a[2:5] //从a[2]开始,取3个元素
s1[1] = 666
fmt.Println("s1 = ", s1)
fmt.Println("a = ", a)
//另外新切片
s2 := s1[2:7]
s2[2] = 777
fmt.Println("s2 = ", s2)
fmt.Println("a = ", a)
}
19_append函数的使用.go
package main //必须有个main包
import "fmt"
func main() {
s1 := []int{}
fmt.Printf("len = %d, cap = %d\n", len(s1), cap(s1))
fmt.Println("s1 = ", s1)
//在原切片的末尾添加元素
s1 = append(s1, 1)
s1 = append(s1, 2)
s1 = append(s1, 3)
fmt.Printf("len = %d, cap = %d\n", len(s1), cap(s1))
fmt.Println("s1 = ", s1)
s2 := []int{1, 2, 3}
fmt.Println("s2 = ", s2)
s2 = append(s2, 5)
s2 = append(s2, 5)
s2 = append(s2, 5)
fmt.Println("s2 = ", s2)
}
20_append扩容特点.go
package main //必须有个main包
import "fmt"
func main() {
//如果超过原来的容量,通常以2倍容量扩容
s := make([]int, 0, 1) //容量为1
oldCap := cap(s)
for i := 0; i < 20; i++ {
s = append(s, i)
if newCap := cap(s); oldCap < newCap {
fmt.Printf("cap: %d ===> %d\n", oldCap, newCap)
oldCap = newCap
}
}
}
21_copy的使用.go
package main //必须有个main包
import "fmt"
func main() {
srcSlice := []int{1, 2}
dstSlice := []int{6, 6, 6, 6, 6}
copy(dstSlice, srcSlice)
fmt.Println("dst = ", dstSlice)
}
22_切片做函数参数.go
package main //必须有个main包
import "fmt"
import "math/rand"
import "time"
func InitData(s []int) {
//设置种子
rand.Seed(time.Now().UnixNano())
for i := 0; i < len(s); i++ {
s[i] = rand.Intn(100) //100以内的随机数
}
}
//冒泡排序
func BubbleSort(s []int) {
n := len(s)
for i := 0; i < n-1; i++ {
for j := 0; j < n-1-i; j++ {
if s[j] > s[j+1] {
s[j], s[j+1] = s[j+1], s[j]
}
}
}
}
func main() {
n := 10
//创建一个切片,len为n
s := make([]int, n)
InitData(s) //初始化数组
fmt.Println("排序前: ", s)
BubbleSort(s) //冒泡排序
fmt.Println("排序后: ", s)
}
23_猜数字游戏.go
package main //必须有个main包
import "fmt"
import "math/rand"
import "time"
func CreatNum(p *int) {
//设置种子
rand.Seed(time.Now().UnixNano())
var num int
for {
num = rand.Intn(10000) //一定是4位数
if num >= 1000 {
break
}
}
//fmt.Println("num = ", num)
*p = num
}
func GetNum(s []int, num int) {
s[0] = num / 1000 //取千位
s[1] = num % 1000 / 100 //取百位
s[2] = num % 100 / 10 //取百位
s[3] = num % 10 //取个位
}
func OnGame(randSlice []int) {
var num int
keySlice := make([]int, 4)
for {
for {
fmt.Printf("请输入一个4位数:")
fmt.Scan(&num)
// 999 < num < 10000
if 999 < num && num < 10000 {
break
}
fmt.Println("请输入的数不符合要求")
}
//fmt.Println("num = ", num)
GetNum(keySlice, num)
//fmt.Println("keySlice = ", keySlice)
n := 0
for i := 0; i < 4; i++ {
if keySlice[i] > randSlice[i] {
fmt.Printf("第%d位大了一点\n", i+1)
} else if keySlice[i] < randSlice[i] {
fmt.Printf("第%d位小了一点\n", i+1)
} else {
fmt.Printf("第%d位猜对了\n", i+1)
n++
}
}
if n == 4 { //4位都猜对了
fmt.Println("全部猜对!!!")
break //跳出循环
}
}
}
func main() {
var randNum int
//产生一个4位的随机数
CreatNum(&randNum)
//fmt.Println("randNum: ", randNum)
randSlice := make([]int, 4)
//保存这个4位数的每一位
GetNum(randSlice, randNum)
//fmt.Println("randSlice = ", randSlice)
/*
n1 := 1234 / 1000 //取商
//(1234 % 1000) //取余数,结果为234 234/100取商得到2
n2 := 1234 % 1000 / 100
fmt.Println("n1 = ", n1)
fmt.Println("n2 = ", n2)
*/
OnGame(randSlice) //游戏
}