当前位置: 代码迷 >> 综合 >> Day07 JavaBasic04
  详细解决方案

Day07 JavaBasic04

热度:93   发布时间:2023-12-24 07:47:35.0
  1. 输入一个 mn的矩阵 和一个np的矩阵,并初始化, 要求打印出两个矩阵的乘积。
package com.cskaoyan.TwoDimensionArray.homework;import java.util.*;
public class Work01 {
    public static void main(String[] args){
    int m, n, p;//两个矩阵的参数System.out.println("请输入3个正整数(m,n,p):");Scanner sc = new Scanner(System.in);m = sc.nextInt();n = sc.nextInt();p = sc.nextInt();//sc.close();int[][] matrix1 = new int[m][n];int[][] matrix2 = new int[n][p];int[][] result = new int[m][p]; //用来存储两个矩阵乘积的矩阵System.out.println("请输入一个" + m + "*" + n + "的矩阵:");//Scanner sc2 = new Scanner(System.in);for(int i = 0;i < m;i++) {
     //输入m*n的矩阵for (int j = 0; j < n; j++) {
    matrix1[i][j] = sc.nextInt();}}System.out.println("请再输入一个" + n + "*" + p + "的矩阵:");for(int i = 0;i < n;i++) {
     //输入n*p的矩阵for (int j = 0; j < p; j++) {
    matrix2[i][j] = sc.nextInt();}}//sc2.close();//计算两矩阵乘积for(int i = 0;i < m;i++){
    for(int j = 0;j < p;j++){
    int num = 0;for(int k = 0;k < n;k++){
    num = num + (matrix1[i][k] * matrix2[k][j]);}result[i][j] = num;}}System.out.println("两矩阵的乘积为:");for(int i = 0;i < m;i++){
    for(int j = 0;j < p;j++){
    System.out.print(result[i][j] + " ");}System.out.println();}sc.close();}
}

测试:
在这里插入图片描述

  1. 定义一个三维数组,并初始化之。 写一个打印函数,负责打印三维数组中的数据,并测试。
package com.cskaoyan.TwoDimensionArray.homework;import java.util.*;
public class Work02 {
    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);//定义一个三维数组System.out.println("请输入m,n,p:");int m = sc.nextInt();int n = sc.nextInt();int p = sc.nextInt();int[][][] arr = new int [m][n][p];//初始化System.out.println("输入一个" + m + "*" + n + "*" + p + "的三维数组:");for(int i = 0;i < m;i++){
    for(int j = 0;j < n;j++){
    for(int k = 0;k < p;k++){
    arr[i][j][k] = sc.nextInt();}}}print(arr);sc.close();}public static void print(int[][][] a){
    System.out.println("你输入的三维数组是:");for(int i = 0;i < a.length;i++){
    for(int j = 0;j < a[i].length;j++){
    for(int k = 0;k < a[i][j].length;k++)System.out.print(a[i][j][k] + " ");System.out.println();}}}
}

测试:
在这里插入图片描述

附加题
1.给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5]
示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7]

package com.cskaoyan.TwoDimensionArray.homework;
import java.util.*;
/*** 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有*/
public class Add01 {
    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);System.out.println("请输入两个正整数m,n:");int m = sc.nextInt();int n = sc.nextInt();int[][] arr = new int[m][n];int[][] tag = new int[m][n];//标记数组,动态初始化为0,访问其元素值后,该元素值置为1System.out.println("请输入" + m + "*" + n + "的矩阵:");for(int i = 0;i < m;i++){
    for(int j = 0;j < n;j++){
    arr[i][j] = sc.nextInt();}}int i = 0;int j = 0;//二维数组数组遍历索引int t = 0;//方向标记值,初始为0,只有四种值:0,1,2,3,分别代表向右、向下、向左、向上int count = 0;while(true){
    //当前元素还没有输出过System.out.print(arr[i][j] + " ");tag[i][j] = 1;//当前元素标记为已被访问count++;if(count == m * n)break;//全部输出结束、跳出循环if(t == 0){
    //当前遍历方向向右if(j + 1 == n){
    //防止数组向右越界、或此方向下的下一个元素已经被访问t++;//转变方向为向下}else if(tag[i][j + 1] == 1){
    t++;i++;}else{
    j++;//否则输出该方向下的下一个元素}}if(t == 1){
    //当前遍历方向向下if(i + 1 == m){
    //防止数组向下越界、或此方向下的下一个元素已经被访问t++;//转变方向为向左}else if(tag[i + 1][j] == 1){
    t++;j--;}else{
    i++;//否则输出该方向下的下一个元素}}if(t == 2){
    //当前遍历方向向左if(j - 1 == -1){
    //防止数组向左越界、或此方向下的下一个元素已经被访问t++;//转变方向为向上}else if(tag[i][j - 1] == 1){
    t++;i--;}else{
    j--;//否则输出该方向下的下一个元素}}if(t == 3){
    //当前遍历方向向上if(i - 1 == -1){
    //防止数组向上越界、或此方向下的下一个元素已经被访问t = 0;//转变方向为向右}else if(tag[i - 1][j] == 1){
    t = 0;j++;}else{
    i--;//否则输出该方向下的下一个元素}}}sc.close();}
}

测试:
在这里插入图片描述