JAVA范例 五)数组---二维数组
?
二维数组
实例67 二维数组的创建与使用
public class TwoArray_01 {public static void main(String[] args) {int array[][] = new int[5][6];// 定义一个5行6列的二维数组arrayint n = 1;for (int i = 0; i < array.length; i++) {// 利用双重循环为数组元素赋值for (int j = 0; j < array[i].length; j++) {array[i][j] = n++;}}// 二维数组的输出System.out.println("二维数组中的数组元素如下:");for (int i = 0; i < array.length; i++) {// 利用双重循环将二维数组中的元素依次输出for (int j = 0; j < array[i].length; j++) {System.out.print(" " + array[i][j]);}System.out.println();}}}
?
实例68 矩阵转置
public class TwoArray_02 {public static void main(String[] args) {int array[][] = { { 22, 18, 36 }, { 27, 34, 58 }, { 12, 51, 32 },{ 14, 52, 64 } };// 创建一个4行3列的二维数组int brray[][] = new int[3][4];// 创建一个3行4列的数组,用于接收转置后的矩阵System.out.println("原型矩阵如下:");for (int i = 0; i < array.length; i++) {// 遍历array数组中的元素for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j] + " ");}System.out.println();}for (int i = 0; i < array.length; i++) {// 此时的i是array数组的行,brray的列for (int j = 0; j < brray.length; j++) {// 此时的j是array数组的列,brray的行brray[j][i] = array[i][j];// 将array数组中的第i行j列的元素赋给brray数组中的j行i列}}System.out.println("\n转置后的矩阵如下:");for (int i = 0; i < brray.length; i++) {// 遍历转置后brray数组中的元素for (int j = 0; j < brray[i].length; j++) {System.out.print(brray[i][j] + " ");}System.out.println();}}}
?
实例69 奇数阶幻方
import java.util.Scanner;public class TwoArray_03 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入~");int n = sc.nextInt();//由键盘输入一个奇数if(n%2==0){//判断输入的数字是否是奇数System.out.println("请输入奇数");return;}int array[][] = new int[n][n];//创建一个n行n列的数组int a = n-1;//获取最后一行的行下标int b = n/2;//获取中间列的列下标for(int i=1;i<=n*n;i++){array[a++][b++]=i;//给最后一行的中间的元素赋值为1if(i%n==0){//判断当前i的值是否是n的倍数a=a-2;//如果是则放在上行同列的位置上b=b-1;}else{//否则放在下一行的下一列(右下方)a=a%n;b=b%n;}}System.out.println(n+"阶幻方如下:");for(int i=0;i<n;i++){//将幻方输出for(int j=0;j<n;j++){System.out.print(" "+array[i][j]);}System.out.println();}}}
?
实例70 求方阵对角线之和
public class TwoArray_04 {public static void main(String[] args) {int n = 5;//表示n行n列int sum = 0;//两条对线的总和int[][] array = getArray(n);// 获取一个奇数阶方阵int diagonal1 = 0;// 对角线1之和int diagonal2 = 0;// 对角线2之和int j = array[0].length - 1;// 获取数组列下标的最大值int k = 0;int m = 0;System.out.println("获得的数组如下:");for (int x = 0; x < n; x++) {// 循环遍历输出array数组for (int y = 0; y < n; y++) {System.out.print(" " + array[x][y]);}System.out.println();}for (int i = 0; i < array.length; i++) {// 求两条对角线之和diagonal1 += array[i][j--];// 求第一条对角线之和diagonal2 += array[k++][m++];// 求第二条对角线之和}if (n % 2 == 1) {// 判断n是否为奇数sum = diagonal1 + diagonal2 - array[n / 2][n / 2];// 是奇数则减去相交的值} else {sum = diagonal1 + diagonal2;// 不是则没有相交点,所以不必减去相交的值}System.out.println("\n两条对角线之和为:" + sum);}public static int[][] getArray(int n) {// 获取一个n*n的方阵int[][] a = new int[n][n];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {a[i][j] = i * j + 1;}}return a;}}
?
实例71 矩阵的加法
public class TwoArray_07 {public static void showArray(int[][] 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 void main(String[] args) {int a[][] = { { 12, 23, 4 }, { 10, 5, 14 }, { 10, 12, 32 },{ 12, 41, 78 } };// 初始化的方式构造一个二维数组aint b[][] = { { 10, 3, 14 }, { 8, 13, 5 }, { 61, 10, 21 },{ 45, 56, 6 } };// 初始化的方式构造一个二维数组bSystem.out.println("二维数组a中的数组元素值如下:");showArray(a); // 调用showArray方法,遍历二维数组a中的每个元素System.out.println("二维数组b中的数组元素值如下:");showArray(b);// 调用showArray方法,遍历二维数组b中的每个元素System.out.println("矩阵减法运算的结果如下:");showArray(subtrationArray(a, b));// 调用showArray方法, 显示矩阵减法运算结果}public static int[][] subtrationArray(int[][] a, int[][] b) { // 矩阵的减法运算if ((a.length != b.length) || (a[0].length != b[0].length)) { // 判断矩阵行数列数是否相等System.out.println("两个矩阵大小不一");return null;} else {int[][] c = new int[a.length][a[0].length];for (int i = 0; i < a.length; i++) { // 依次循环行数for (int j = 0; j < a[0].length; j++) { // 依次循环列数c[i][j] = a[i][j] - b[i][j]; // 两个矩阵相减}}return c; // 返回阵减法运算结果的数组c}}}
?
实例72 矩阵的减法
public class TwoArray_08 {public static int[][] addArray(int[][] a, int[][] b) {if ((a.length != b.length) || (a[0].length != b[0].length)) { // 判断矩阵行数列数是否相等System.out.println("两个矩阵大小不一");return null;} else {int[][] c = new int[a.length][a[0].length];for (int i = 0; i < a.length; i++) { // 依次循环行数for (int j = 0; j < a[0].length; j++) { // 依次循环列数c[i][j] = a[i][j] + b[i][j]; // 两个矩阵相加}}return c; // 返回阵加法运算结果的数组c}}public static void showArray(int[][] 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 void main(String[] args) {int a[][] = { { 12, 23, 4 }, { 10, 5, 14 }, { 10, 12, 32 },{ 12, 41, 78 } };// 初始化的方式构造一个二维数组aint b[][] = { { 10, 3, 14 }, { 8, 13, 5 }, { 61, 10, 21 },{ 45, 56, 6 } };// 初始化的方式构造一个二维数组bSystem.out.println("二维数组a中的数组元素值如下:");showArray(a); // 调用showArray方法,遍历二维数组a中的每个元素System.out.println("二维数组b中的数组元素值如下:");showArray(b);// 调用showArray方法,遍历二维数组b中的每个元素System.out.println("矩阵加法运算的结果如下:");showArray(addArray(a, b));// 调用showArray方法, 显示矩阵加法运算结果}}
?
实例73 快递报价单
public class TwoArray_10 {public static void main(String[] args) {int weight = 1;// 定义表示货物的重量的变量int path = 50;// 定义路途的变量int price = 5;// 定义表示价格的变量int Overweightprice = 2;// 定义超重的附加费int n = 0, m = 0;// 递增变量int[][] details = new int[10][5];// 创建一个数组,装有货物重量在1~5千克,路程在50~5000公里内的所有快递价格for (int i = 0; i < details.length; i++) {// 行表示路程details[i][0] = price;// 为每个路程段赋不超重时的快递费for (int j = 1; j < details[i].length; j++) {// 列表示超重的重量数,单位为千克details[i][j] = details[i][0] + j * Overweightprice;//算出每超重j千克,应付的快递费}price++;Overweightprice++;}System.out.println("货物重量在1~5千克,路程在50~5000公里内的所有收费明细如下:");for (int i = 0; i < details.length; i++) {// 行表示路程m = 0;System.out.println("路程为" + (path + (n * path)) + "公里");for (int j = 1; j < details[i].length; j += 2) {// 列表示超重的重量数,单位为千克System.out.println("重量为" + (weight + (m * weight))+ "千克,其快递费为:" + details[i][j - 1] + " " + "重量为"+ (weight + ((m + 1) * weight)) + "千克,其快递费为:"+ details[i][j]);m = m + 2;}n++;if (details[i].length % 2 == 1) {System.out.println("重量为" + (weight + (m * weight))+ "千克,其快递费为:" + details[i][details[i].length - 1]);}}}}
?
?