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:[email protected]
 * @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:[email protected]
 * @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:[email protected]
 * @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:[email protected]
 * @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(登錄(包含攔截器)和註銷

更多免費資源請關注微信公衆號:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章