数组和切片练习

// 定义一个数据,存放班上所有同学姓名 按任意键,随机抽取一个同学,如果被抽到了,删除这个同学姓名,如果输入了q或数据为空,退出程序
func drawName(names []string) {
	rand.Seed(time.Now().UnixNano())
	for len(names) > 0 {
		fmt.Println("请输入任意键,随机抽取一个同学并删除,输入q或数据为空,退出程序")
		var input string
		fmt.Scan(&input)
		if input == "q" {
			fmt.Println("退出程序成功")
			return
		}
		nameIndex := rand.Intn(len(names))
		name := names[nameIndex]
		names = append(names[:nameIndex], names[nameIndex+1:]...)
		//...将第二个切片作为整体传递给append函数,不加...会报错,不是int类型
		//当你使用 append 函数时,如果想要将一个切片作为单独的参数传递给 append 函数,而不是将其元素逐一传递,就需要使用省略号 ...。这是因为 append 函数接受一个或多个切片作为参数,并且这些切片会被展开为单个元素。当你想要将整个切片作为一个整体传递时,就需要使用省略号 ...。
		fmt.Println("随机抽取的姓名是:", name)
		fmt.Println(name, "已被移除")
		fmt.Println("剩余的姓名是:", names)
	}
	fmt.Println("所有姓名已抽取完毕")
}
func main() {
	names := []string{}
	file, err := os.OpenFile("E:\\三创\\hrsy-go\\test.txt", os.O_RDONLY, 0777) // 使用八进制表示权限
	if err != nil {
		fmt.Println("打开文件失败", err)
		return
	}
	reader := bufio.NewReader(file)
	for {
		arr1, _, err := reader.ReadLine()
		if err == io.EOF {
			break
		}
		b := string(arr1)
		names = append(names, b)
	}
	drawName(names)
}

//rand.Seed(time.Now().UnixNano()) 初始化随机数种子 这是一个很大的数从初始到现在的时间 确保每次生成的随机数不一样
//UnixNano() 方法是 time.Time 类型的一个方法,用于返回自 Unix 纪元 (1970-01-01T00:00:00Z UTC) 开始以来的纳秒数,时间会变化
//nameIndex := rand.Intn(len(names))  Intn之前要先初始化,返回【0,n)的随机数
//使用固定的种子值 rand.Seed(12345) 方便测试和发现问题 每次运行程序生成的随机数序列相同
//定义全局变量不能用:=赋值,只能用:=初始化
//stu := [...]string{"张三", "李四", "王五", "赵六", "孙七", "周八"} ...代表数组
//[]string{"张三", "李四", "王五", "赵六", "孙七", "周八"}  []表示切片
//func main() {
//	var input string
//	stu := []string{"张三", "李四", "王五", "赵六", "孙七", "周八"}
//	for len(stu)>0 && input != "q" && input != "Q"{
//		fmt.Println("请输入任意键,随机抽取一个同学并删除,输入q或数据为空,退出程序")
//		fmt.Scan(&input)
//		if input == "q" {
//			fmt.Println("退出程序成功")
//			return
//		}
//		nameIndex := rand.Intn(len(stu))
//		name := stu[nameIndex]
//		stu = append(stu[:nameIndex], stu[nameIndex+1:]...)
//		fmt.Println("随机抽取的姓名是:", name)
// 	}
//}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值