• 排序和查找3


    多维数组我们只介绍二维数组。

    二维数组的应用场景:

    比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。

    二维数组的使用:

    快速入门案例:
    请用二维数组输出如下图形
    0 0 0 0 0 0
    0 0 1 0 0 0
    0 2 0 3 0 0
    0 0 0 0 0 0

    代码演示:

    func main() {

      //定义/声明 二维数组
      var arr [4][6]int
      //赋初值
      arr[1][2] = 1
      arr[2][1] = 2
      arr[2][3] = 3

      //遍历二维数组,按照要求输出图形
      for i := 0; i < 4; i++ {
        for j := 0; j < 6; j++ {
          fmt.Print(arr[i][j], " ")
        }
        fmt.Println()
      }
    }

    使用方式1:先声明/定义 再赋值

      1)语法:var 数组名[大小][大小]类型
      2)比如:var arr[2][3]int,再赋值。
      3)使用演示
      4)二维数组在内存的存在形式(重点)

    func main() {

      //定义/声明 二维数组
      var arr2 [2][3]int
      arr2[1][1] = 10
      fmt.Println(arr2)

      fmt.Printf("arr2[0]的地址%p ", &arr2[0])
      fmt.Printf("arr2[1]的地址%p ", &arr2[1])

      fmt.Printf("arr2[0][0]的地址%p ", &arr2[0][0])
      fmt.Printf("arr2[1][0]的地址%p ", &arr2[1][0])
    }

    打印的结果:

     二维数组在内存的布局的示意图:

     

     使用方式2:直接初始化

      1)声明:var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值..},{初值..}}

      2)赋值(有默认值,比如int 类型的就是0)

      3)使用演示

      4)说明:二维数组在声明/定义时也对应有四种写法【和一维数组类似】

      var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值..},{初值..}}
      var 数组名 [大小][大小]类型 = [...][大小]类型{{初值..},{初值..}}
      var 数组名 = [大小][大小]类型{{初值..},{初值..}}
      var 数组名 = [...][大小]类型{{初值..},{初值..}}


    func main() {

      var arr3 [2][3]int = [2][3]int{{1,2,3},{4,5,6}}
      fmt.Println("arr3=", arr3)
    }

    二维数组的遍历:

    1)双层for循环完成遍历

    案例演示:

    func main() {

      var arr3 = [2][3]int{{1,2,3},{4,5,6}}

      //for循环遍历
      for i := 0; i < len(arr3); i++ {
        for j := 0; j < len(arr3[i]); j++ {
          fmt.Printf("%v ", arr3[i][j])
        }
        fmt.Println()
      }
    }

    2)for-range 方式完成遍历

    案例演示:

    func main() {

      var arr3 = [2][3]int{{1,2,3},{4,5,6}}

      //for-range来遍历二维数组
      for i,v := range arr3 {
        for j,v2 := range v{
          fmt.Printf("arr3[%v][%v]=%v ", i, j, v2)
        }
        fmt.Println()
      }
    }

    小例子:

    定义二维数组,用于保存三个班,每个班五名同学成绩,并求出每个班级平均分、以及所有班级平均分。

    func main() {

      var scores [3][5]float64
      //循环的输入成绩
      for i := 0; i < len(scores); i++ {
        for j := 0; j < len(scores[i]); j++ {
          fmt.Printf("请输入第%d班的第%d个学生的成绩 ", i+1, j+1)
          fmt.Scanln(&scores[i][j])
        }
      }

      //遍历输出成绩后的二维数组,统计平均分
      totalSum := 0.0 //定义一个变量,用于累计所有班级的总分
      for i := 0; i < len(scores); i++ {
        sum := 0.0 //定义一个变量,用于累计各个班级的总分
        for j := 0; j < len(scores[i]); j++ {
          sum += scores[i][j]
        }
        totalSum += sum
        fmt.Printf("第%d班级的总分为%v 平均分%v ", i+1, sum, sum / float64(len(scores[i])))
      }

      fmt.Printf("所有班级的总分为%v, 所有班级平均分%v ", totalSum, totalSum / 15)
    }

  • 相关阅读:
    Python基础课:多继承
    Python基础课:定义一个函数,输入一个序列,判断序列是顺序还是逆序,顺序输出UP,逆序输出DOWN,否则输出None
    Python基础课:测试type 和 isinstance 那个的速度更快
    Python基础课:定义一个函数,可以对序列逆序的输出(对于列表和元组可以不用考虑嵌套的情况)
    WEBAPI获取数据
    jQuery中的.height()、.innerHeight()和.outerHeight()
    Javascript基类对象原型中有数组的情况
    必须关注的25位知名JavaScript开发者
    jQuery中的事件绑定函数.bind()、.live()、on()和.delegate()
    Javascript全局变量和delete
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11403019.html
Copyright © 2020-2023  润新知