9、Java——二维数组案例代码详解

简介: 9、Java——二维数组案例代码详解

案例一

       求一个3*3矩阵对角线元素之和


       思路分析:利用双重for循环控制输入二维数组,再将a[i][j]累加后输出。i和j符合对角线元素的情况有,i=j或者i+j=a.length-1;


       代码展示:

public static void main(String[] args) {
  //定义一个Scanner类
  Scanner sc=new Scanner(System.in);
  //定义一个二维数组,并从键盘获取数值
  int a[][]=new int[3][3];
  for (int i = 0; i < a.length; i++) {
    System.out.println("请输入a["+i+"]一维数组内的三个整数:");
    for (int j = 0; j < a[i].length; j++) {
    a[i][j]=sc.nextInt();
    }
  }
  //打印输出这个3*3矩阵的二维数组
  int sum=0;
  System.out.println("这个3*3矩阵的二维数组为:");
  for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    System.out.print(a[i][j]+"\t");
    if (i==j&&i+j!=a.length-1||i+j==a.length-1) {
      sum+=a[i][j];
    }
    }
    System.out.println();
  }
  System.out.println("对角线元素之和:"+sum);
  }

       运行效果:

2.png案例二

       定义一个4行4列的二维数组,逐个从键盘输入值,然后将第1行和第4行的数据进行交换,将第2行和第3行的数据进行交换


       思路分析:利用Arrays.copyOf方法复制


       代码展示:


public static void main(String[] args) {
  // 定义一个Scanner类
  Scanner sc = new Scanner(System.in);
  // 定义一个二维数组,并从键盘获取数值
  int[][] a = new int[4][4];
  for (int i = 0; i < a.length; i++) {
    System.out.println("请输入a[" + i + "]一维数组内的" + a.length + "个整数:");
    for (int j = 0; j < a[i].length; j++) {
    a[i][j] = sc.nextInt();
    }
  }
  // 打印输出这个4行4列二维数组
  System.out.println("这个4行4例的二维数组为:");
  for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    System.out.print(a[i][j] + "\t");
    }
    System.out.println();
  }
  // 定义一个中间的一维数组b,作为第1行和第4行交换的中间临时存储数组
  int[] b = new int[4];
  b = Arrays.copyOf(a[0], 4);
  a[0] = Arrays.copyOf(a[3], 4);
  a[3] = b;
  // 定义一个中间的一维数组c,作为第2行和第3行交换的中间临时存储数组
  int[] c = new int[4];
  c = Arrays.copyOf(a[1], 4);
  a[1] = Arrays.copyOf(a[2], 4);
  a[2] = c;
  //打印输出交换后的4行4列二维数组
  System.out.println("交换后的4行4例二维数组为:");
  for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    System.out.print(a[i][j] + "\t");
    }
    System.out.println();
  }
  }


 运行效果:


1.gif

案例三

       定义一个3行4列的二维数组,逐个从键盘输入值,编写程序将四周的数据清0


       思路分析:当a[i][j]数组的下标满足:i==0 || i==a.length-1 || j==0 || j==a[i].length-1,清理即可


       代码展示:


public static void main(String[] args) {
  //定义一个Scanner类
  Scanner sc=new Scanner(System.in);
  //定义一个二维数组,并从键盘获取数值
  int a[][]=new int[3][4];
  for (int i = 0; i < a.length; i++) {
    System.out.println("请输入a["+i+"]一维数组内的三个整数:");
    for (int j = 0; j < a[i].length; j++) {
    a[i][j]=sc.nextInt();
    }
  }
  //打印输出这个3*4矩阵的二维数组
  System.out.println("这个3行4列的二维数组为:");
  for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    //根据分析可知,要想四周为0,则当i=0或者i=2或者j=0或者j=3时,数值为0;
    if(i==0||i==a.length-1||j==0||j==a[i].length-1){
      a[i][j]=0;
    }
    System.out.print(a[i][j]+"\t");
    }
    System.out.println();
  }
  }


       运行效果:

2.png


案例四

       定义一个3行4列的二维数组,逐个从键盘输入值,将左下三角的值清0


       思路分析:a[i][j]数组,当i>=j的时候,为左下角三角形的数值(包含对角线);如果不需要包含对角线数值,则只需要i>j即可额。


       代码展示:


public static void main(String[] args) {
  //定义一个Scanner类
  Scanner sc=new Scanner(System.in);
  //定义一个二维数组,并从键盘获取数值
  int a[][]=new int[3][4];
  for (int i = 0; i < a.length; i++) {
    System.out.println("请输入a["+i+"]一维数组内的三个整数:");
    for (int j = 0; j < a[i].length; j++) {
    a[i][j]=sc.nextInt();
    }
  }
  //打印输出这个3*4矩阵的二维数组
  System.out.println("这个3行4列的二维数组为:");
  for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    //根据分析可知,要想左下三角的值为零,则i值不大于j值即可实现
    if(i>=j){
      a[i][j]=0;
    }
    System.out.print(a[i][j]+"\t");
    }
    System.out.println();
  }
  }


       运行效果:

1.gif

案例五

       定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;


       代码展示:


public static void main(String[] args) {
  /*
   * 定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;
   */
  Scanner sc = new Scanner(System.in);
  System.out.print("请输入N*N二维数组的N值:");
  int n = sc.nextInt();
  // 定义N*N二维数组,并从键盘获取数值
  int a[][] = new int[n][n];
  for (int i = 0; i < a.length; i++) {
    System.out.println("请输入a[" + i + "]一维数组内的"+n+"个整数:");
    for (int j = 0; j < a[i].length; j++) {
    a[i][j] = sc.nextInt();
    }
  }
  // 打印输出N*N二维数组
  //定义一个装每一行最大值
  int[] maxNums=new int[n];
  System.out.println("N*N二维数组为:");
  for (int i = 0; i < a.length; i++) {
    int max=0;
    for (int j = 0; j < a[i].length; j++) {
    System.out.print(a[i][j] + "\t");
    if(a[i][j]>max){
      max=a[i][j];
    }
    }
    maxNums[i]=max;
    System.out.println();
  }
  //打印输出每一行最大值组成的数组
  System.out.println("每行中最大值组成的一维数组为:");
  for (int i : maxNums) {
    System.out.print(i+" ");
  }
  }


相关文章
|
21天前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
296 4
|
2月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
322 3
|
2月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
221 3
|
2月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
178 3
|
1月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
217 115
|
1月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
158 98
|
2月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
349 0
|
3月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
116 2
|
1月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅