文章目录
什么是二维数组?
- 二维数组就是数组中定义了数组,通俗地说就是数组中还有数组
怎么读二维数组?
- 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("程序结束了");
}
}
- Java入门-Java学习路线课程第一课:初识JAVA
- Java入门-Java学习路线课程第二课:变量与数据类型
- Java入门-Java学习路线课程第三课:选择结构
- Java入门-Java学习路线课程第四课:循环结构
- Java入门-Java学习路线课程第五课:一维数组
- Java入门-Java学习路线课程第七课:类和对象
- Java入门-Java学习路线课程第八课:方法和方法重载
- Java入门-Java学习路线扩展课程:equals的使用
- Java入门-Java学习路线课程面试篇:取商 / 和取余(模) % 符号的使用
- Java进阶-Java学习路线课程第一课:Java集合框架-ArrayList和LinkedList的使用
- Java进阶-Java学习路线课程第二课:Java集合框架-HashSet的使用及去重原理
- Spring框架-Java学习路线课程第一课:Spring核心
- Spring框架-Java学习路线课程:Spring的扩展配置
- Springboot框架-Java学习路线课程:Springboot框架的搭建之maven的配置
- java学习:在给学生演示用Myeclipse10.7.1工具生成War时,意外报错:SECURITY: INTEGRITY CHECK ERROR
- 使用jquery发送Ajax请求的几种异步刷新方式
- idea Springboot启动时内嵌tomcat报错- An incompatible version [1.1.33] of the APR based Apache Tomcat Native
- 一个简单的SSM框架Demo(登录(包含拦截器)和注销