Java入门-Java学习路线课程第六课:二维数组

本博客地址 | GitHub | 更多资源免费下载

JavaSE二维数组

什么是二维数组?

  • 二维数组就是数组中定义了数组,通俗地说就是数组中还有数组

怎么读二维数组?

  • case:
  	int[][] array = new int[3][5];
  
  	在此二维数组中有三个一维数组,每个一维数组中各有5个元素。

二维数组的语法格式

  • 格式1:
数据类型[][]  数组名= new 数据类型[m][n];(推荐使用)

	int[][] array = new int[3][5];
  • 格式2:
数据类型 数组名[][] = new 数据类型[m][n];

    int array[][] = new int[2][2]; 
  • 格式3:
数据类型[] 数组名[] = new 数据类型[m][n];

	int[] array[] = new int[2][2]; 
  • 格式4:
数据类型[][]  数组名= new 数据类型[m][];

	int[][] array = new int[3][] 
  • 格式5 (定义并赋值)简化方式:
数据类型[][]  数组名= {{元素1,元素2,},{元素1,元素2,},{元素1,元素2,}};(推荐使用)

	int[][] array = {{1,2,3},{4,5},{6,7,8,9}}; 
  • 格式6(定义并赋值):
数据类型[][]  数组名= new 数据类型[][]{{元素1,元素2,},{元素1,元素2,},{元素1,元素2,}};

	int[][] array = new int[][]{{1,2,3},{4,5},{6,7,8,9}}; 

二维数组的演示案例:

package cn.org.xx.array;

/**
 * @ClassName:ArrayTest1.java
 * @Description:二维数组
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-10 下午2:52:14
 * @Version:1.0
 */
public class ArrayTest2 {
	/**
		二维数组需求:
	 */
	public static void main(String[] args) {
		// 声明数组(静态声明数组)
		int[][] array = new int[3][5];
		//在此二维数组中,有3个一维数组,每个一维数组中各有5个元素。
		System.out.println(array);//[[
		System.out.println(array[1]);//[
		System.out.println(array[0][0]);//0
	}
}

二维数组内存图:

在这里插入图片描述

计算5个班各自的总成绩的演示案例:

package cn.org.xx.array;

import java.util.Scanner;

/**
 * @ClassName:ArrayTest1.java
 * @Description:二维数组的使用
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-10 下午2:52:14
 * @Version:1.0
 */
public class ArrayTest3 {
	/**
		二维数组需求
		有5个班各5名学生某门课程的成绩,如何计算5个班各自的总成绩
		1.Scanner的三步走:引包、创建对象、使用数据
		2.for 前提条件:有固定的次数
			2.1 for的外层决定循环的轮次
			2.2 for的内层决定循环的具体次数(具体的业务)
		

	 */
	public static void main(String[] args) {
		// 声明数组(静态声明数组)
		int[][] array = new int[5][5];
		//在此二维数组中,有5个一维数组,每个一维数组中各有5个元素。
		int sum;
		//Scanner
		Scanner input=new Scanner(System.in);
		
		//第一个for做输入的事情(输入核心代码)
		for (int i = 0; i < array.length; i++) {//外层决定轮次 5个班      
		//	sum=0;
			System.out.print("输入第"+(i+1)+"班的成绩:");
			for (int j = 0; j < array[i].length; j++) {//内层决定具体的业务
				System.out.println("\n请输入第"+(j+1)+"个同学的成绩:");
				//给每个一维数组中的各有5个元素赋值
				array[i][j] = input.nextInt();
				//sum+=arry[i][j];
			}			
			//System.out.println(sum);
		}
		//第二个for做输出成绩的事情(输出核心代码)
		for (int i = 0; i < array.length; i++) {//外层决定轮次 5个班
			sum=0;
			for (int j = 0; j < array[i].length; j++) {//内层决定具体的业务
				sum+=array[i][j];
			}
			//打印每个班的总成绩
			System.out.println("请输入第"+(i+1)+"个总成绩: "+sum);
		}
	
	}
}

经典冒泡排序演示案例加需求分析:

package cn.org.xx.array;

/**
 * @ClassName:ArrayTest1.java
 * @Description:冒泡排序
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-10 下午2:52:14
 * @Version:1.0
 */
public class ArrayTest1 {
	/**
	 * 需求:冒泡排序 99 68 8 188 98 
	 * 分析需求:5-1= 4轮
	 * 4轮                                                                                                                                   
	 * 
		                                                                 
	            1            2              3             4              交换次数
	 下标
	   0    1和2交换  	 2和3交换  		3和4交换  	  4和5交换     	       4	
		
		
		
		        1             2              3         
	   1    1和2交换	    2和3交换       3和4交换                	         3
		 
		
		        1             2                	
	   2     1和2交换 	    2和3交换                   		     	          2
		
		
		         1                     
		3     1和2交换                              			         	      1
	 * 
	 * 
	 * 数组的下标是从0开始的
	 * 
	 * 0+4=4
	 * 1+3=4
	 * 2+2=4 
	 * 3+1=4
	 * 发现规律:
	 * i+j=4; 
	 * 得出:
	 * j= 4-i
	 * i外层决定轮次 4 j决定内部的次数   4-i
	 * 
	 *交换前打印数组array元素;
	 * 分析核心代码为:
	 * for(int i=0;i<4;i++){//轮次 4 
	 *       for(int j=0;j<4-i;j++){ 
	 *             if(array[j]>array[j+1]){
	 *                  //交换 
	 *                  int temp; 
	 *                  temp=array[j];
	 *                  array[j]=array[j+1]; 
	 *                  array[j+1]=temp; 
	 *             }
	 *       }
	 *} 
	 * 以上4写死了,可以如下代码替换成array.length-1
	 * 交换前打印数组array元素
	 */
	public static void main(String[] args) {
		// 声明数组(静态声明数组)
		int[] array = { 99, 68, 8, 188, 98,100,200 };
		//              0   1  2   3    4  5
		// 打印一下冒泡前排序
		System.out.println("-------冒泡前排序--------");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + "\t");
		}
		//冒泡的核心代码:
		for (int i = 0; i <array.length-1; i++) {//外层的for循环决定 轮次 4
			for (int j = 0; j < array.length-1 - i; j++) {//内层的for循环决定 具体做的事 每一轮都会产生一个最大的数
				if (array[j] > array[j + 1]) {
					// 交换
					int temp;
					temp = array[j];
					array[j] = array[j + 1];
					array[j + 1] = temp;
				}
			}
	}
	
		System.out.println();//换行打印
		System.out.println("\n-------冒泡后排序--------");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + "\t");
	}
	
}
 }

总结(冒泡排序):

  • 冒泡:
    就是水中冒泡泡,轻的上浮,重的下沉。
  • java冒泡排序:
    每一轮的相邻两个数比较后进行交换,每一轮到最后都得到一个最大数(最沉的一个),直至成为一组升序数据。
  • 外层的for循环决定轮次 array.length-1
  • 内层的for循环决定 具体做的事 每一轮都会产生一个最大的数

附:打印图案、经典九九乘法口决及需求分析

package cn.org.xx.test;

/**
 * @ClassName:TestPic1.java
 * @Description:九九乘法口诀
 * @Author:DongGaoYun 
 * @URL: www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-12 下午2:09:34
 * @Version:1.0
 */
public class TestPic1 {

	public static void main(String[] args) {

		//九九乘法口决
		//test1();
		//乘法口决的三角形
		test2();
		//矩形
		test3();
		//正三角形
		test4();
		/*打印菱形需求分析: 外层5轮  内层具体打印如下:
	       *                        第一轮打印1个        1    寻找规律:i=1 2*1-1 刚好打印的是1
	    ***       第二轮打印3个        2        i=2 2*2-1 刚好打印的是2
	   *****      第三轮打印5个        3    依次类推  公式为:2*i-1
	  *******     第四轮打印7个        4
	 *********    第五轮打印9个     5 
	  *******    只需要从这行开始打印。也就是只有四轮, 已知条件是外层循环:int i=1;i<=4;i++
	   *****      这个打印正好与上面相反,
	    ***     第一轮打印7个  寻找规律:前面的正三角打印7个星是这个的公式:2*4-1 刚好当i=1时,2*(5-i)-1=2*4-1 打印7颗星
	     *        第二轮打印5个       前面的正三角打印5个星是这个的公式:2*3-1 刚好当i=2时,2*(5-i)-1=2*3-1 打印5颗星
	                 第二轮打印3个 依次类推: 公式为:2*(5-i)-1
	              第二轮打印1个
	     */
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <=5-i; j++) {//外层决定轮次
				System.out.print(" ");//内层决定具体的次数
			}
			for (int j = 1; j <=2*i-1; j++) {//外层决定轮次
				System.out.print("*");//内层决定具体的次数
			}
			System.out.println();
		}
		for (int i = 1; i <= 4; i++) {
			for (int j = 1; j <=i; j++) {//外层决定轮次
				System.out.print(" ");//内层决定具体的次数
			}
			for (int j = 1; j <=2*(5-i)-1; j++) {//外层决定轮次
				System.out.print("*");//内层决定具体的次数
			}
			System.out.println();
		}
		System.out.println("程序结束了");
	}
	/**正三角形
	 * 
	 *      *
		   ***
		  *****
		 *******
		*********
	  
	   5轮次  轮次用i变量表示              行数 5   具体做的事情j变量表示  
		               
		                                                                  
		    1 	                 4    
		    2                    3    
		    3                    2    
		    4                    1    
		    5                    0     
		
	    i+j=5
	    j=5-i	
	 */
	private static void test4() {
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <=5-i; j++) {//外层决定轮次
				System.out.print(" ");//内层决定具体的次数
			}
			for (int j = 1; j <=2*i-1; j++) {//外层决定轮次
				System.out.print("*");//内层决定具体的次数
			}
			System.out.println();
		}
	}
	/*矩形
	    *********
		*********
		*********
		*********
		*********
		*********
		*********
		*********
		*********  
	 */
	private static void test3() {
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= 9; j++) {//外层决定轮次
				System.out.print("*");//内层决定具体的次数
			}
			System.out.println();
		}
		System.out.println("程序结束了");
	}
	/*类似于乘法口决的三角形
	    *
		**
		***
		****
		*****
		******
		*******
		********
		*********
	 */
	private static void test2() {
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= i; j++) {//外层决定轮次
				System.out.print("*");//内层决定具体的次数
			}
			System.out.println();
		}
		System.out.println("程序结束了");
	}
	/*九九乘法口决
	 * 九九乘法口决打印需求:
	 * @param args
	 * 
	 * 分析需求:
	 *  1*1=1 
		2*1=2 2*2=4 
		3*1=3 3*2=6 3*3=9 
		4*1=4 4*2=8 4*3=12 4*4=16 
		5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
		6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
		7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
		8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
		9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
	 * 有固定的次数
	 * 外部的for决定轮次    9
	 * 内部的for决定具体的打印次数
	 * 
	 * 
	 * 1.打印逐渐递减
	 * 2.排版从左到右依次显示
	 */
	private static void test1() {
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= i; j++) {//外层决定轮次
				System.out.print(i+"*"+j+"="+j*i+" ");//内层决定具体的次数
			}
			System.out.println();
		}
		System.out.println("程序结束了");
	}
}


———— 精 选 文 章 ————
  1. Java入门-Java学习路线课程第一课:初识JAVA
  2. Java入门-Java学习路线课程第二课:变量与数据类型
  3. Java入门-Java学习路线课程第三课:选择结构
  4. Java入门-Java学习路线课程第四课:循环结构
  5. Java入门-Java学习路线课程第五课:一维数组
  6. Java入门-Java学习路线课程第七课:类和对象
  7. Java入门-Java学习路线课程第八课:方法和方法重载
  8. Java入门-Java学习路线扩展课程:equals的使用
  9. Java入门-Java学习路线课程面试篇:取商 / 和取余(模) % 符号的使用
  10. Java进阶-Java学习路线课程第一课:Java集合框架-ArrayList和LinkedList的使用
  11. Java进阶-Java学习路线课程第二课:Java集合框架-HashSet的使用及去重原理
  12. Spring框架-Java学习路线课程第一课:Spring核心
  13. Spring框架-Java学习路线课程:Spring的扩展配置
  14. Springboot框架-Java学习路线课程:Springboot框架的搭建之maven的配置
  15. java学习:在给学生演示用Myeclipse10.7.1工具生成War时,意外报错:SECURITY: INTEGRITY CHECK ERROR
  16. 使用jquery发送Ajax请求的几种异步刷新方式
  17. idea Springboot启动时内嵌tomcat报错- An incompatible version [1.1.33] of the APR based Apache Tomcat Native
  18. 一个简单的SSM框架Demo(登录(包含拦截器)和注销

更多免费资源请关注微信公众号:

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页