【第三十篇】Go 数组复杂使用 - 数组反转

104 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

一、数组复杂使用 - 数组反转

要求: 随机生成五个数,并将其反转打印

通过找规律反转【思路分析】

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// 思路:
	// 1. 随机生成五个数,rang.Intn() 函数
	// 2. 当我们得到随机数后,就放到一个数组 int 数组
	// 3. 将其反转打印

	var intArr3 [5]int
	// 为了每次生成的随机数不一样,我们需要给一个 seed 值
	rand.Seed(time.Now().Unix())
	for i := 0; i < len(intArr3); i++ {
		intArr3[i] = rand.Intn(100)
	}

	fmt.Println("交换前 = ", intArr3)
	// 反转打印,交换的次数是 len / 2 ,倒数第一和第一个元素交换,倒数第2个和第2个元素交换
	temp := 0 //做一个临时变量
	for i := 0; i < len(intArr3)/2; i++ {
		temp = intArr3[len(intArr3)-1-i]
		intArr3[len(intArr3)-1-i] = intArr3[i]
		intArr3[i] = temp
	}
	fmt.Println("交换后 = ", intArr3)
}


package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// 思路:
	// 1. 随机生成五个数,rang.Intn() 函数
	// 2. 当我们得到随机数后,就放到一个数组 int 数组
	// 3. 将其反转打印

	var intArr3 [5]int
	// 为了每次生成的随机数不一样,我们需要给一个 seed 值
	lens := len(intArr3)

	rand.Seed(time.Now().Unix())
	for i := 0; i < lens; i++ {
		intArr3[i] = rand.Intn(100)
	}

	fmt.Println("交换前 = ", intArr3)
	// 反转打印,交换的次数是 len / 2 ,倒数第一和第一个元素交换,倒数第2个和第2个元素交换
	temp := 0 //做一个临时变量
	for i := 0; i < lens/2; i++ {
		temp = intArr3[len(intArr3)-1-i]
		intArr3[len(intArr3)-1-i] = intArr3[i]
		intArr3[i] = temp
	}
	fmt.Println("交换后 = ", intArr3)
}

拓展

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	// 思路:
	// 1. 随机生成五个数,rang.Intn() 函数
	// 2. 当我们得到随机数后,就放到一个数组 int 数组
	// 3. 将其反转打印

	var intArr3 [5]int
	for i := 0; i < len(intArr3); i++ {
		intArr3[i] = rand.Intn(100)
	}
	fmt.Println(intArr3)
}

对上面代码的总结:

  1. 为什么生成的随机数都是一个固定的值????
  2. func (*Rand) Seed :你给的这个种子 Seed 是一个固定值,所以生成的随机数也是固定值。
  3. 引入时间函数,生成随机种子数
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// 思路:
	// 1. 随机生成五个数,rang.Intn() 函数
	// 2. 当我们得到随机数后,就放到一个数组 int 数组
	// 3. 将其反转打印

	var intArr3 [5]int
	// 为了每次生成的随机数不一样,我们需要给一个 seed 值
	rand.Seed(time.Now().Unix())
	for i := 0; i < len(intArr3); i++ {
		intArr3[i] = rand.Intn(100)
	}
	fmt.Println(intArr3)
}