如有疑問或建議,請在線加QQ: 或掃 QQ: 或掃 微信: 或加 微信號: QingYunJiao
想系統學習JAVA的學友請加備註:xx | 想提升技術的學友請加備註:js | 需要資料的學友請加備註:zl
文章目錄
什麼是二維數組?
- 二維數組就是數組中定義了數組,通俗地說就是數組中還有數組
怎麼讀二維數組?
- 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");
}
}
}
總結(冒泡排序):
- 外層的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("程序結束了");
}
}