已经快12点了,先写了发出来,要不就算明天的了
今天写的有点晚,现在代码正在调试中,一会发出来
最近看了好多基础的go语言教程,然后教程里都有的也不好意思再在这写一遍了,写一个猜数字小游戏练手,也算用到了很多基础知识了
代码如下:
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
)
func main() {
fmt.Println("欢迎来到猜数字小游戏")
targetArr := randNum(4)
var srcArr [4]int
crectNum := 0
reader := bufio.NewReader(os.Stdin)
fmt.Println("请输入四个数字连续输入不加空格")
for {
input, _ := reader.ReadString('\n')
for i := 0; i < 4; i++ {
srcArr[i] = int(input[i] - '0')
}
crectNum = bothRight(srcArr, targetArr)
fmt.Printf("数字正确位置不正确的有%d,数字位置全对的有%d", numIsRight(srcArr, targetArr), crectNum)
fmt.Println("")
if crectNum == 4 {
fmt.Println("恭喜你答对了")
fmt.Println(targetArr)
break
}
}
}
func randNum(lenth int) (arr []int) {
tempArr := make([]int, lenth)
for i := 0; i < lenth; i++ {
tempNum := rand.Intn(10)
b := true
for j := 0; j <= i; j++ {
if tempArr[j] == tempNum {
i--
b = false
break
}
}
if b {
tempArr[i] = tempNum
}
}
return tempArr
}
func numIsRight(srcArr [4]int, targetArr []int) (num int) {
num = 0
for i := 0; i < len(srcArr); i++ {
for j := 0; j < len(targetArr); j++ {
if srcArr[i] == targetArr[j] && i != j {
num++
}
}
}
return
}
func bothRight(srcArr [4]int, targetArr []int) (num int) {
num = 0
for i := 0; i < len(srcArr); i++ {
if srcArr[i] == targetArr[i] {
num++
}
}
return
}
还有bug,在我电脑上持行随机数老是固定的,今天太晚了,明天好好看下,代码写的又太啰嗦了,对不起,时间太晚了,明天可以重构一下
运行效果如下:
欢迎来到猜数字小游戏
请输入四个数字连续输入不加空格
1234
数字正确位置不正确的有0,数字位置全对的有1
1798
数字正确位置不正确的有0,数字位置全对的有4
恭喜你答对了
[1 7 9 8]
成功: 进程退出代码 0.
只会随机1798,一下就答对了,重新编译还是1798
郁闷
好吧
r:=rand.New(rand.NewSource(time.Now().UnixNano()))
用上面这个可以给随机函数一个时间种子,保证每次随机到的不一样
用r.Intn(10)来获取随机数
有疑问加站长微信联系(非本文作者)