多维数组,初始化,练习

JavaEE 专栏收录该内容
75 篇文章 1 订阅

为什么需要学习二维数组?
每个Java班有若干个学生,我们可以使用数组来存储每一个班级的所有学生,
然而我们同时全国有很多个Java班。所有的班级也应该用一个数组来存储。
这种情况下的数据我们应该如何来存储呢?Java就提供了多维数组的概念,
这里可以用一个二维数组来实现。

== 二维数组的概念: 本质就是存放了一维数组的数组==

格式1:
数据类型[][] 数组名 = new 数据类型[m][n]; Java语言写法
m: 代表一共有m个一维数组
n: 代表每一个一维数组一共有n个元素

变式:
数据类型 数组名[][] = new 数据类型[m][n]; C语言写法
数据类型[] 数组名[] = new 数据类型[m][n];

int x,y,z;
int x[ ],y,z;
int[ ] x,y[ ]; int[ ] x , int[ ] y[ ]

格式2:
数据类型[][] 数组名 = new 数据类型[m][];
注意:这里的n可以省略不写,就代表了每一个一维数组的元素可以动态变化

二维数组的内存图

public class TwoArrayDemo01 {
	public static void main(String[] args) {
		// 定义一个二维数组
		int[][] arr = new int[3][2];
		System.out.println(arr); // [[I@7852e922
		
		System.out.println(arr[0]); // [I@4e25154f
		System.out.println(arr[1]); // [I@70dea4e
		System.out.println(arr[2]); // [I@5c647e05
		// System.out.println(arr[3]); // ArrayIndexOutOfBoundsException
		
		System.out.println(arr[0][0]); // 0
		System.out.println(arr[0][1]); // 0
		System.out.println(arr[1][0]); // 0
		// System.out.println(arr[1][2]); // ArrayIndexOutOfBoundsException

	}
}

格式2
数据类型[][] 数组名 = new 数据类型[m][];
m必不可少,n可以省略

package com.sxt.twoarraydemo;

public class TwoArrayDemo02 {
	public static void main(String[] args) {
		int[][] arr = new int[3][];
		System.out.println(arr); // 7852e922
		
		System.out.println(arr[0]); // null
		System.out.println(arr[1]); // null
		System.out.println(arr[2]); // null
		
		arr[0] = new int[3];
		arr[1] = new int[2];
		arr[2] = new int[1];
		
		System.out.println(arr[0]); // 4e25154f
		System.out.println(arr[1]); // 70dea4e
		System.out.println(arr[2]); // 5c647e05
		
		System.out.println(arr[0][0]); // 0
		System.out.println(arr[0][1]); // 0
		System.out.println(arr[1][0]); // 0
//		System.out.println(arr[1][2]); // 数组越界
		
		arr[2][0] = 100;
		System.out.println(arr[2][0]);
	}
}

二位数组的静态初始化

数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,…},{元素1,元素2,…},{元素1,元素2,…}};
数据类型[][] 数组名 = {{元素1,元素2,…},{元素1,元素2,…},{元素1,元素2,…}};

二维数组遍历

package com.sxt.twoarraydemo;

public class TwoArrayDemo03 {
	public static void main(String[] args) {
		// int[][] arr = new int[][]{{11,22,33}, {44,55}, {66}};
		int[][] arr = { { 11, 22, 33 }, { 44, 55 }, { 66 } };

		System.out.println(arr.length); // 3
		System.out.println(arr[0].length); // 3
		System.out.println(arr[1].length); // 2
		System.out.println(arr[2].length); // 1
		System.out.println("----------------------------");
		/*System.out.println(arr[0][0]);
		System.out.println(arr[0][1]);
		System.out.println(arr[0][2]);*/
		/*for (int i = 0; i < arr[0].length; i++) {
			System.out.println(arr[0][i]);
		}*/
		
		/*System.out.println(arr[1][0]);
		System.out.println(arr[1][1]);
		System.out.println(arr[1][2]);*/
		/*for (int i = 0; i < arr[1].length; i++) {
			System.out.println(arr[1][i]);
		}
		
		for (int i = 0; i < arr[2].length; i++) {
			System.out.println(arr[2][i]);
		}*/
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.println(arr[i][j]);
			}
		}
	}
}

练习:

1、计算三个班学生的总成绩,平均成绩,最高成绩
A班成绩: 65,78,98,100
B班成绩:76,89,77,80,91,97
C班学生总成绩:100,99,98

package com.sxt.twoarraydemo;

import java.lang.reflect.Array;
import java.util.Arrays;
public class TwoArrayDemo04 {
	public static void main(String[] args) {
		double[][] arr = { { 65, 78, 98, 100 }, { 76, 89, 77, 80, 91, 97 }, { 100, 99, 98 } };

		double sum = 0.0;
		int totalLength = 0;

		double maxScore = arr[0][0];
		for (int i = 0; i < arr.length; i++) {
			totalLength += arr[i].length;
			for (int j = 0; j < arr[i].length; j++) {
				if (arr[i][j] > maxScore) {
					maxScore = arr[i][j];
				}
				sum += arr[i][j];
			}
		}
		
		double[] mergeArray = mergeArray(arr);
		Arrays.sort(mergeArray);
		
		System.out.println("总成绩: " + sum);
		System.out.println("平均成绩 " + sum / totalLength);
		System.out.println("最大成绩: " + maxScore);
		System.out.println(Arrays.toString(mergeArray));

	}
	
	public static void print2Array(double[][] arr) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}

	public static double[] mergeArray(double[]... arrs) {

		// 统计所有数组长度的总和
		int totalLength = 0;

		for (double[] arr : arrs) {
			totalLength += arr.length;
		}

		double[] totalArr = new double[totalLength];
		int dest = 0;
		for (double[] arr : arrs) {
			System.arraycopy(arr, 0, totalArr, dest, arr.length);
			dest += arr.length;
		}

		return totalArr;
	}
}

打印杨辉三角

package com.sxt;

import java.util.Scanner;

public class YangHuiDemo {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入杨辉三角的行数:");
		int n = input.nextInt();
		//	创建杨辉三角数组
		int[][] arr = new int[n][n];
		
		//	赋值
		for (int i = 0; i < n; i++) {
			for (int j = 0; j <= i; j++) {
				if (j == 0 || j == i ) {
					arr[i][j] = 1;
					
				} else {
					arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
				}
			}
		}
		for (int i = 0; i < n; i++) {
			//	先输出空格
			for (int j = 0; j < n - 1 - i; j++) {
				System.out.print(" ");
			}
			for (int k = 0; k <= i; k++) {
				System.out.print(arr[i][k] + " ");
			}
			System.out.println();
		}
	}

}



3.现在给出两个数组
数组A:1,7,9,11,13,15,17,19
数组B:2,4,6,8,10
1,7,9,11,13,15,17,19,| 2,4,6,8,10
编写一个方法实现将两个数组合并成一个新的数组c,并且按照升序排序

package com.sxt.practice;

import java.util.Arrays;


public class Practice03 {
	public static void main(String[] args) {
		int[] arrA = { 1, 7, 9, 11, 13, 15, 17, 19 };
		int[] arrB = { 2, 4, 6, 8, 10 };
		int[] arrC = { 12, 24, 16 };
		
		System.out.println(Arrays.toString(mergeArray(arrA,arrB,arrC)));
	}
	
	public static int[] mergeArray(int[]... arrs) {
		
		// 统计所有数组长度的总和
		int totalLength = 0;
		
		for (int[] arr : arrs) {
			totalLength += arr.length;
		}
		
		int[] totalArr = new int[totalLength];
		int dest = 0;
		for (int[] arr : arrs) {
			System.arraycopy(arr, 0, totalArr, dest, arr.length);
			dest += arr.length;
		}
		
		return totalArr;
	} 
	
}

2.现在有如下的一个数组:
int oldArr[ ]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:
int newArr[ ]={1,3,4,5,6,6,5,4,7,6,7,5} ;

package com.sxt.practice;

import java.util.Arrays;


public class Practice02 {
	static int[] arr;
	
	public static void main(String[] args) {
		arr = new int[]{ 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 };
		// int[] newArr = removeZeroFromArray(arr);
		// System.out.println(Arrays.toString(newArr));
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == 0) {
				remove(i);
				i--;
			}
		}
		System.out.println(Arrays.toString(arr));
	}
	

	public static int[] removeZeroFromArray(int[] arr) {
		int length = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] != 0) {
				length++;
			}
		}

		int[] newArr = new int[length];
		int index = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] != 0) {
				newArr[index] = arr[i];
				index++;
			}
		}

		return newArr;
	}
	
	public static void remove(int index) {
		int[] newArray = new int[arr.length - 1];
		System.arraycopy(arr, 0, newArray, 0, index);
		System.arraycopy(arr, index + 1, newArray, index, arr.length - index - 1);
		arr = newArray;
	}
}

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值