二维数组
实例67 二维数组的创建与使用
public class TwoArray_01 {
public static void main(String[] args) {
int array[][] = new int[5][6]; // 定义一个5行6列的二维数组array
int 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; //给最后一行的中间的元素赋值为1
if(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 } }; // 初始化的方式构造一个二维数组a
int b[][] = { { 10, 3, 14 }, { 8, 13, 5 }, { 61, 10, 21 },
{ 45, 56, 6 } }; // 初始化的方式构造一个二维数组b
System.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 } }; // 初始化的方式构造一个二维数组a
int b[][] = { { 10, 3, 14 }, { 8, 13, 5 }, { 61, 10, 21 },
{ 45, 56, 6 } }; // 初始化的方式构造一个二维数组b
System.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]);
}
}
}
}