- 一、場景
- 二、分析
- 三、代碼
- 四、運行結果
- 五、延伸
一、場景
隨機生成
2個數,在這2個數中隨機一個結果數字,然后我們鍵盤錄入,猜測這個結果數字是幾,
二、分析
需要完成這些操作,我們需要知道的知識點:
- 1、亂數獲取函式
- 2、鍵盤錄入函式
- 3、列印(格式化列印)函式
三、代碼
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//結果數值的取值范圍
guessArray := [2][2]int64{
{10, 20}, //最小值取值范圍為[10, 20)
{30, 80}, //最大值取值范圍為[30, 80)
}
guessResult := make([]int64, 0) //我們需要猜測的數字范圍
var i int64
for i = 0; i < 2; i++ { //回圈取出最小、最大值
min := guessArray[i][0]
max := guessArray[i][1]
randNumber := genRangeNumber(min, max, i)
guessResult = append(guessResult, randNumber) //把隨機出來的結果追加到我們需要猜測的數字中
}
//生成結果資料
guessMin := guessResult[0]
guessMax := guessResult[1]
resultNumber := genRangeNumber(guessMin, guessMax, 999) //在[guessMin, guessMax)中隨機生成答案數字
//先提示一下猜測范圍
fmt.Printf("數字范圍在:[%d, %d) \n", guessMin, guessMax)
//撰寫一個for死回圈:一直猜測結果,直到猜對為止
var inputNumber int64
guessNumber := 0 //記錄猜測的次數
for {
//開始猜測了
fmt.Println("請輸入數字:")
fmt.Scanln(&inputNumber)
if inputNumber > resultNumber {
fmt.Printf("大了,數字范圍:(%d, %d)\n", guessMin, inputNumber)
guessMax = inputNumber //把猜測是最大值設定為輸入的值
guessNumber++
continue //跳出回圈
}
if inputNumber < resultNumber {
fmt.Printf("小了,數字范圍:(%d, %d)\n", inputNumber, guessMax)
guessMin = inputNumber //把猜測是最小值設定為輸入的值
guessNumber++
continue //跳出回圈
}
guessNumber++
break //跳出回圈
}
fmt.Printf("恭喜您:猜測了 [ %d ] 次就成功猜到了,正確答案是:%d", guessNumber, resultNumber)
}
/**
* 生成兩個數字[min, max)之間的亂數
* @param min 最小值
* @param max 最大值
* @param i 為了隨機,加上回圈i,保證唯一
*/
func genRangeNumber(min, max, i int64) int64 {
//println(time.Now().Unix()) //列印:1609232986
//println(time.Now().UnixNano()) //列印:1609232986276977000
rand.Seed(time.Now().UnixNano() + i) //給一個時間戳的種子,否則每次生成都是一樣的值
randNum := rand.Int63n(max - min)
randNum = min + randNum
return randNum
}
四、運行結果

五、延伸
我們可以完善一下我們的代碼:
- 1、輸入的數字
型別校驗 - 2、輸入的數字
范圍校驗:不能小于猜測的最小值,并且不能大于等于猜測的最大值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242944.html
標籤:其他
上一篇:用java實作的簡易貪吃蛇游戲
