二維數(shù)組格式1
/*
二維數(shù)組:就是元素為一維數(shù)組的一個(gè)數(shù)組可帽。
格式1:
數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[m][n];
m:表示這個(gè)二維數(shù)組有多少個(gè)一維數(shù)組。
n:表示每一個(gè)一維數(shù)組的元素有多少個(gè)蒲肋。
注意:
A:以下格式也可以表示二維數(shù)組
a:數(shù)據(jù)類型 數(shù)組名[][] = new 數(shù)據(jù)類型[m][n];
b:數(shù)據(jù)類型[] 數(shù)組名[] = new 數(shù)據(jù)類型[m][n];
B:注意下面定義的區(qū)別
int x;
int y;
int x,y;
int[] x;
int[] y[];
int[] x,y[];//這個(gè)x是一維數(shù)組蘑拯,y是二維數(shù)組
*/
class Array2Demo {
public static void main(String[] args) {
//定義一個(gè)二維數(shù)組
int[][] arr = new int[3][2];
//定義了一個(gè)二維數(shù)組arr
//這個(gè)二維數(shù)組有3個(gè)一維數(shù)組的元素
//每一個(gè)一維數(shù)組有2個(gè)元素
//輸出二維數(shù)組名稱
System.out.println(arr); //地址值 [[I@175078b
//輸出二維數(shù)組的第一個(gè)元素一維數(shù)組的名稱
System.out.println(arr[0]); //地址值 [I@42552c
System.out.println(arr[1]); //地址值 [I@e5bbd6
System.out.println(arr[2]); //地址值 [I@8ee016
//輸出二維數(shù)組的元素
System.out.println(arr[0][0]); //0
System.out.println(arr[0][1]); //0
}
}
格式1內(nèi)存圖解
public static void main(String[] args) {
// write your code here
// int[] array = new int[10];
// for(int i = 0; i< array.length;i++)
// {
// array[i] = i+1;
// }
//
// for(int i = 0; i< array.length;i++)
// {
// System.out.println(array[i]);
// }
int[][] array = new int[3][2];
//任何一個(gè)二維數(shù)組都可以看成一個(gè)一維數(shù)組(數(shù)組中每一個(gè)元素又是一個(gè)數(shù)組)
// System.out.println(array.length);//看成的一維數(shù)組的長(zhǎng)度
// System.out.println(array[0].length);
array[0][0] = 1;
array[0][1] = 2;
array[1][0] = 3;
array[1][1] = 4;
array[2][0] = 5;
array[2][1] = 6;
for(int i = 0; i<array.length;i++)
{
for(int j = 0; j< array[i].length; j++)
{
System.out.println(array[i][j]);
}
}
}
二維數(shù)組格式2
/*
格式2:
數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[m][];
m:表示這個(gè)二維數(shù)組有多少個(gè)一維數(shù)組。
列數(shù)沒有給出兜粘,可以動(dòng)態(tài)的給申窘。這一次是一個(gè)變化的列數(shù)。
*/
class Array2Demo2 {
public static void main(String[] args) {
//定義數(shù)組
int[][] arr = new int[3][];
System.out.println(arr); //[[I@175078b
System.out.println(arr[0]); //null
System.out.println(arr[1]); //null
System.out.println(arr[2]); //null
//動(dòng)態(tài)的為每一個(gè)一維數(shù)組分配空間
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
System.out.println(arr[0]); //[I@42552c
System.out.println(arr[1]); //[I@e5bbd6
System.out.println(arr[2]); //[I@8ee016
System.out.println(arr[0][0]); //0
System.out.println(arr[0][1]); //0
//ArrayIndexOutOfBoundsException
//System.out.println(arr[0][2]); //錯(cuò)誤
arr[1][0] = 100;
arr[1][2] = 200;
}
}
二維數(shù)組格式2 內(nèi)存圖解
二維數(shù)組格式3
/*
格式3:
基本格式:
數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
簡(jiǎn)化版格式:
數(shù)據(jù)類型[][] 數(shù)組名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
舉例:
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{4,5},{6}};
*/
class Array2Demo3 {
public static void main(String[] args) {
//定義數(shù)組
int[][] arr = {{1,2,3},{4,5},{6}};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[0][0]); //1
System.out.println(arr[1][0]); //4
System.out.println(arr[2][0]); //6
System.out.println(arr[0][1]); //2
System.out.println(arr[1][1]); //5
//越界
System.out.println(arr[2][1]); //錯(cuò)誤
}
}
二維數(shù)組格式3 內(nèi)存圖解
遍歷二維數(shù)組
/*
需求:二維數(shù)組遍歷
外循環(huán)控制的是二維數(shù)組的長(zhǎng)度孔轴,其實(shí)就是一維數(shù)組的個(gè)數(shù)剃法。
內(nèi)循環(huán)控制的是一維數(shù)組的長(zhǎng)度。
*/
class Array2Test {
public static void main(String[] args) {
//定義一個(gè)二維數(shù)組
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
//用方法改進(jìn)
//調(diào)用方法
printArray2(arr);
}
/*
需求:遍歷二維數(shù)組
兩個(gè)明確:
返回值類型:void
參數(shù)列表:int[][] arr
*/
public static void printArray2(int[][] arr) {
for(int x=0; x<arr.length; x++) {
for(int y=0; y<arr[x].length; y++) {
System.out.print(arr[x][y]+" ");
}
System.out.println();
}
}
}
二維數(shù)組求和
/*
公司年銷售額求和
某公司按照季度和月份統(tǒng)計(jì)的數(shù)據(jù)如下:?jiǎn)挝?萬(wàn)元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
分析:
A:把題目的數(shù)據(jù)用二維數(shù)組來(lái)表示
int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
B:如何求和呢?
求和其實(shí)就是獲取到每一個(gè)元素路鹰,然后累加即可贷洲。
C:定義一個(gè)求和變量sum,初始化值是0晋柱。
D:通過(guò)遍歷就可以得到每一個(gè)二維數(shù)組的元素优构。
E:把元素累加即可。
F:最后輸出sum雁竞,就是結(jié)果钦椭。
*/
class Array2Test2 {
public static void main(String[] args) {
//把題目的數(shù)據(jù)用二維數(shù)組來(lái)表示
int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
//定義一個(gè)求和變量sum拧额,初始化值是0。
int sum = 0;
//通過(guò)遍歷就可以得到每一個(gè)二維數(shù)組的元素彪腔。
for(int x=0; x<arr.length; x++) {
for(int y=0; y<arr[x].length; y++) {
//把元素累加即可侥锦。
sum += arr[x][y];
}
}
//最后輸出sum,就是結(jié)果德挣。
System.out.println("一年的銷售額為:"+sum+"萬(wàn)元");
}
}
二維數(shù)組樹出楊輝三角:打印楊輝三角形(行數(shù)可以鍵盤錄入)
/*
需求:打印楊輝三角形(行數(shù)可以鍵盤錄入)
1 1
2 1
3 3 1
4 6 4 1
5 10 10 5 1
分析:看這種圖像的規(guī)律
A:任何一行的第一列和最后一列都是1
B:從第三行開始恭垦,每一個(gè)數(shù)據(jù)是它上一行的前一列和它上一行的本列之和。
步驟:
A:首先定義一個(gè)二維數(shù)組格嗅。行數(shù)如果是n番挺,我們把列數(shù)也先定義為n。
這個(gè)n的數(shù)據(jù)來(lái)自于鍵盤錄入吗浩。
B:給這個(gè)二維數(shù)組任何一行的第一列和最后一列賦值為1
C:按照規(guī)律給其他元素賦值
從第三行開始建芙,每一個(gè)數(shù)據(jù)是它上一行的前一列和它上一行的本列之和。
D:遍歷這個(gè)二維數(shù)組懂扼。
*/
import java.util.Scanner;
class Array2Test3 {
public static void main(String[] args) {
//創(chuàng)建鍵盤錄入對(duì)象
Scanner sc = new Scanner(System.in);
//這個(gè)n的數(shù)據(jù)來(lái)自于鍵盤錄入禁荸。
System.out.println("請(qǐng)輸入一個(gè)數(shù)據(jù):");
int n = sc.nextInt();
//定義二維數(shù)組
int[][] arr = new int[n][n];
//給這個(gè)二維數(shù)組任何一行的第一列和最后一列賦值為1
for(int x=0; x<arr.length; x++) {
arr[x][0] = 1; //任何一行第1列
arr[x][x] = 1; //任何一行的最后1列
}
//按照規(guī)律給其他元素賦值
//從第三行開始,每一個(gè)數(shù)據(jù)是它上一行的前一列和它上一行的本列之和阀湿。
for(int x=2; x<arr.length; x++) {
//這里如果y<=x是有個(gè)小問(wèn)題的赶熟,就是最后一列的問(wèn)題
//所以這里要減去1
//并且y也應(yīng)該從1開始,因?yàn)榈谝涣幸彩怯兄盗? for(int y=1; y<=x-1; y++) {
//每一個(gè)數(shù)據(jù)是它上一行的前一列和它上一行的本列之和陷嘴。
arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
}
}
//這個(gè)時(shí)候映砖,要注意了,內(nèi)循環(huán)的變化必須和曾經(jīng)講過(guò)的九九乘法表類似
for(int x=0; x<arr.length; x++) {
for(int y=0; y<=x; y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}
}