一、二维数组以及多维数组

1、二维数组的定义:

​ 在一维数组中定义每一个元素也是一个数组元素,这样的数组称为”二维数组“

​ 多维数组就是在一维数组上再次定义二维数组或三位数组等。

​ 一维数组定义 int [] array={1,2,3}

  1. //定义三个长度的二维数组,其数组的每一个元素是一个一维数组
  2. int [][] arrays={{},{},{}};
  3. 或者
  4. int [][] arrays=new int [3][2];//等号右边的左边[]中表示二维数组的长度,其中2可以省略,3不能省略
  5. //注意:等号左边有几个[]就表示几维

  1. //1、定义二维数组
  2. int [][] array;
  3. //定义时给二维数组赋值 3个长度的二维数组里面的一维数组的长度不一定相等
  4. int [][] array2={{1,2,3},{4,5},{7,8}}
  5. //定义时只指定大小,不给定初始值
  6. int [][]array3=new int[3][];//等价{{},{},{}}
  7. //array3[0][0]=1;//赋值时 空指针异常,因为里面的一维数组是空的
  8. //定义一个3个长度的二维数组,里面的元素长度是2
  9. int array4[][]=new int[3][2];
  10. //给元素赋值
  11. array4[0][0]=1;
  12. //输出二维数组中的所有元素
  13. for(int i=0;i<array4.length;i++){
  14. //System.out.println(array4[i]);
  15. for(int j=0;j<array4[i].length;j++){
  16. System.out.println(array[i][j]);
  17. }
  18. }

二、二维数组的应用

1、定义5*5的矩阵,计算最大值最小值

  1. public class Test{
  2. public static void main(String[] args) {
  3. //定义一个5*5的二维数组
  4. int [][] array=new int[5][5];
  5. //定义最大值,并初始化
  6. int max=0;
  7. //定义最小值,并初始化
  8. int min=0;
  9. //为二维数组中的每一个元素赋上一个0-100的整数值,并遍历输出二维数组
  10. for (int i = 0; i <array.length ; i++) {
  11. for (int j = 0; j <array[i].length ; j++) {
  12. array[i][j]=(int)(Math.random()*100);
  13. System.out.print(array[i][j]+"\t");
  14. }
  15. System.out.println();//换行
  16. }
  17. //将数组中的第一个元素赋值给max
  18. max =array[0][0];
  19. for (int i = 0; i <array.length ; i++) {
  20. for (int j = 0; j <array[i].length ; j++) {
  21. //如果数组中元素大于max,则将元素赋值给max
  22. if(array[i][j]>=max){
  23. max=array[i][j];
  24. }
  25. }
  26. }
  27. //输出二维数组中的最大值
  28. System.out.println("最大值为:"+max);
  29. //将数组中的第一个元素赋值给min
  30. min =array[0][0];
  31. for (int i = 0; i <array.length ; i++) {
  32. for (int j = 0; j <array[i].length ; j++) {
  33. //如果元素小于min,则将元素赋值给min
  34. if(array[i][j]<=min){
  35. min=array[i][j];
  36. }
  37. }
  38. }
  39. //输出二维数组中的最小值
  40. System.out.println("最小值为:"+min);
  41. }
  42. }

2、五子棋游戏

  1. public class Test{
  2. //定义一个字符串型20*20的二维数组
  3. static String [][] qipan=new String[20][20];
  4. public static void main(String[] args) {
  5. System.out.println("------------------------------五子棋游戏------------------------------");
  6. //初始化棋盘
  7. for (int i = 0; i <qipan.length; i++) {
  8. for (int j = 0; j <qipan[i].length; j++) {
  9. qipan[i][j]="+";
  10. }
  11. }
  12. printQipan();
  13. System.out.println("游戏开始:");
  14. Scanner sc=new Scanner(System.in);
  15. while(true) {
  16. System.out.println("请玩家(黑棋)落子:");
  17. System.out.print("请输入棋子的行数(1-20):");
  18. int num1 = sc.nextInt();
  19. System.out.print("请输入棋子的列数(1-20):");
  20. int num2 = sc.nextInt();
  21. if (num1 <= 0 || num1 > 20 || num2 <= 0 || num2 > 20 ) {
  22. System.out.println("落子超出棋盘边界,请重新落子!");
  23. continue;
  24. } else {
  25. if( qipan[num1 - 1][num2 - 1] != "+"){
  26. System.out.println("该位置已有棋子,请重新落子!");
  27. continue;
  28. }else{
  29. qipan[num1-1][num2-1]="";
  30. }
  31. }
  32. //白棋落子
  33. int row=0;
  34. int col=0;
  35. // System.out.println("白棋思考中...");
  36. while(true){
  37. row=(int)(Math.random()*20);
  38. col=(int)(Math.random()*20);
  39. if(qipan[row][col]=="+"){
  40. break;
  41. }
  42. }
  43. qipan[row][col]="●";
  44. //打印棋盘
  45. printQipan();
  46. //判断输赢
  47. if(judge()){
  48. System.out.println(s+"赢了");
  49. break;
  50. }
  51. }
  52. }
  53. //打印棋盘
  54. public static void printQipan(){
  55. for (int i = 0; i <qipan.length ; i++) {
  56. for (int j = 0; j <qipan[i].length ; j++) {
  57. System.out.print(qipan[i][j]+"\t");
  58. }
  59. System.out.println();
  60. }
  61. }
  62. //判断输赢的方法
  63. static String s="";
  64. public static boolean judge(){
  65. boolean flag=false;
  66. for (int i = 0; i <qipan.length; i++) {
  67. for (int j = 0; j <qipan[i].length ; j++) {
  68. if(qipan[i][j]==""||qipan[i][j]=="●"){
  69. //判断横向
  70. if(j<16&&
  71. qipan[i][j]==qipan[i][j+1]
  72. &&qipan[i][j]==qipan[i][j+2]
  73. &&qipan[i][j]==qipan[i][j+3]
  74. &&qipan[i][j]==qipan[i][j+4]){
  75. s=qipan[i][j];
  76. flag=true;
  77. break;
  78. }
  79. //判断右斜下
  80. else if(i<16&&j<16&&qipan[i][j]==qipan[i+1][j+1]
  81. &&qipan[i][j]==qipan[i+2][j+2]
  82. &&qipan[i][j]==qipan[i+3][j+3]
  83. &&qipan[i][j]==qipan[i+4][j+4]){
  84. s=qipan[i][j];
  85. flag=true;
  86. break;
  87. }
  88. //判断纵向
  89. else if(i<16&&qipan[i][j]==qipan[i+1][j]
  90. &&qipan[i][j]==qipan[i+2][j]
  91. &&qipan[i][j]==qipan[i+3][j]
  92. &&qipan[i][j]==qipan[i+4][j]){
  93. s=qipan[i][j];
  94. flag=true;
  95. break;
  96. }
  97. //判断左斜下
  98. else if(i<16&&j>3&&qipan[i][j]==qipan[i-1][j-1]
  99. &&qipan[i][j]==qipan[i-2][j-2]
  100. &&qipan[i][j]==qipan[i-3][j-3]
  101. &&qipan[i][j]==qipan[i-4][j-4]){
  102. s=qipan[i][j];
  103. flag=true;
  104. break;
  105. }
  106. }
  107. }
  108. }
  109. return flag;
  110. }
  111. }

拓展:利用二分法查找数组中的元素

  1. public class Test {
  2. public static void main(String[] args) {
  3. // 1、指定一个20个长度的数组 随机数
  4. int [] array=new int[20];
  5. for (int i = 0; i <array.length; i++) {
  6. array[i]=(int)(Math.random()*100);
  7. }
  8. //输出数组中的每一个元素
  9. System.out.println("数组中的元素为:");
  10. System.out.println(Arrays.toString(array));
  11. // 2、排序 (升序)
  12. Arrays.sort(array);
  13. //输出排序后的数组
  14. System.out.println("排序后的数组为:");
  15. System.out.println(Arrays.toString(array));
  16. // 3、输入一个目标数
  17. Scanner sc=new Scanner(System.in);
  18. System.out.print("请输入想要查找的数字:");
  19. int num=sc.nextInt();
  20. // 3、比较
  21. //定义 最小值下标 最大值下标 中间值下标 查找的目标下标
  22. /**
  23. * 最小下标 0
  24. * * 最大下标 length-1
  25. * *
  26. * * 循环条件: 最小值小标<=最大值下标
  27. * 中间下标: middle = (最小值+最大值)/2
  28. * * 如果中间值比目标大 说明 在左边 改变最大值下标 = 中间值下标-1
  29. * * 如果中间值比目标小 说明 在右边 改变最小值小标 = 中间值下标+1
  30. * * 如果相等 就break
  31. * * 一直这样比较 结束的条件是什么
  32. */
  33. //最小值小标
  34. int minIndex=0;
  35. //最大值下标
  36. int maxIndex=array.length-1;
  37. //中间值下标
  38. int middle;
  39. //目标值下标
  40. int index=-1;
  41. //计数器
  42. int count=0;
  43. while(minIndex<=maxIndex){
  44. count++;
  45. middle=(minIndex+maxIndex)/2;
  46. if(num<array[middle]){
  47. maxIndex=middle-1;
  48. }else if(num>array[middle]){
  49. minIndex=middle+1;
  50. }else {
  51. index=middle;
  52. break;
  53. }
  54. }
  55. if(index!=-1){
  56. System.out.println("目标已找到");
  57. System.out.print("共查询次数:"+count+"\n");
  58. System.out.print("目标数下标为:"+index);
  59. }else{
  60. System.out.println("目标不存在");
  61. }
  62. }
  63. }

Java二维数组以及多维数组的定义及应用的更多相关文章

  1. JAVA二维数组的复制

    JAVA二维数组的复制 笔者今天做一道ccf题目时,遇到要将二维数组拷贝复制时,没有用常规的那种一个一个数的复制,用的是System.arraycopy()来进行复制,下面介绍这个函数的一些注意点: ...

  2. java 二维数组的行列长度

    在 java 中,其实只有一维数组,而二维数组是在一维数组中嵌套实现的.比如 int[][] a = {{},{},{},{}} 要取行数和某一行的列数可以 : int rowLen = a.leng ...

  3. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...

  4. “全栈2019”Java第三十一章:二维数组和多维数组详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. Java 二维数组

    在 Java 中,二维数组与一维数组一样,但是不同于 C 中的二维数组: 1. 在 Java 中,二维数组可以看成是以数组为元素的数组,例如:  int a[][] = {{1,2},{3,4,5,6 ...

  6. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)

    Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)

  7. 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用

    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...

  8. Java二维数组转成稀疏sparsearray数组

    稀疏数组 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记 ...

  9. 【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸

    多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...

  10. Java二维数组的概念和使用方法

    二维数组 数组的数组---二维数组的每一个元素是一个一维数组 定义格式 数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度]; int[][] ...

随机推荐

  1. CF309E 题解

    11:30,过题.12:50,忘记做法. 吃饭时不该看未来日记的,Ynoj 害人不浅(确信). 以上为个人吐槽. 题目大意 不知道题目翻译是个啥...但讨论区有大佬给出了精确的翻译.我改得符合题目背景 ...

  2. Java 2023年接地气的中高级面试题一(附答案)

    直入主题: Q1:为什么要用分布式锁? 在分布式系统中,多个进程或线程可能会同时访问共享资源,这可能会导致数据不一致.并发性问题.性能下降等问题.为了解决这些问题,我们通常会使用分布式锁来协调多个进程 ...

  3. 常用Linux发行版操作系统大盘点

    B站CodeSheep的教程 https://www.bilibili.com/read/cv6026694

  4. 恰好经过k条边的最短路

    需要用到离散数学中关于关系矩阵的运算的知识 一个表示一个图中任意两点间经过2条边最短路的关系矩阵的平方表示的是任意两点间经过4条边的最短路的关系矩阵 原因在于当我们选定中间点时,路径的前半部分和后半部 ...

  5. abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3上(五十八)

    Abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  6. Spark基础实验七

    今天在做实验七,最开始有许许多多多的错误,最后通过查找.问同学才知道是数据集的格式和存放位置的原因. 就在好不容易解决了上一个错误,下一个错误就立马而来,错误如下: 目前还未找到解决办法,spark实 ...

  7. TiDB SQL调优案例之避免TiFlash帮倒忙

    背景 早上收到某系统的告警tidb节点挂掉无法访问,情况十万火急.登录中控机查了一下display信息,4个TiDB.Prometheus.Grafana全挂了,某台机器hang死无法连接,经过快速重 ...

  8. 全网最详细中英文ChatGPT-GPT-4示例文档-信息智能提取从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  9. [Linux]常用命令之【top/uptime/w/vmstat/free】

    1 top 语法:top [-s time] [-d count] [-q] [-u] [-h] [-n number] [-f filename] -s time 设置屏幕刷新的延时,单位为秒,默认 ...

  10. 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】

    比赛传送门:https://ac.nowcoder.com/acm/contest/53366 难度适中. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式 ...