Go语言实现猜数字|青训营笔记

62 阅读1分钟

学习到的东西:

1、bufio.NewReader(os.Stdin) 类似于c++里面的freopen函数,重定向一下,或者说java里的流函数?

2、rand.Seed(time.Now().UnixNano()) 随机数的种子,根据时间改变

3、strings.TrimSuffix(input, "\n") 字符串的去除后缀

4、strconv.Atoi(input) 字符串转数字

package guess

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"time"
)

func Testa() {
	rand.Seed(time.Now().UnixNano())
	maxnum := 100
	secretNumber := rand.Intn(maxnum) //生产最大值为 maxnum的数
	fmt.Print(secretNumber, "\n")

	reader := bufio.NewReader(os.Stdin)
	for {
		input, err := reader.ReadString('\n')
		fmt.Print("input your guess:\n")
		if err != nil {
			fmt.Print("error1!")
			return
		}
		input = strings.TrimSuffix(input, "\n") //去掉后缀"\n

		guess, err := strconv.Atoi(input)
		if err != nil {
			fmt.Print("error2!")
			return
		}
		fmt.Print("your guess is ", guess, "\n")
		switch {
		case guess > secretNumber:
			fmt.Print(">\n")
		case guess < secretNumber:
			fmt.Print("<\n")
		default:
			fmt.Print("=\n")
			return
		}

	}
}

封装实现队列:

学到的知识

package queue

type Item interface {
}

// Item the type of the queue
type ItemQueue struct {
	items []Item
}

type ItemQueuer interface {
	New() ItemQueue
	push(t Item)
	pop()
	front() *Item
	IsEmpty() bool
	Size() int
}

// New creates a new ItemQueue
func (s *ItemQueue) New() *ItemQueue {
	s.items = []Item{}
	return s
}

// Enqueue adds an Item to the end of the queue
func (s *ItemQueue) push(t Item) {
	s.items = append(s.items, t)
}

func (s *ItemQueue) pop() {
	if len(s.items) == 1 {
		s.items = []Item{}
	} else {
		s.items = s.items[1:len(s.items)]
	}
}

// dequeue
func (s *ItemQueue) front() *Item {
	item := s.items[0] // 先进先出

	return &item
}

func (s *ItemQueue) IsEmpty() bool {
	return len(s.items) == 0
}

// Size returns the number of Items in the queue
func (s *ItemQueue) Size() int {
	return len(s.items)
}