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+" ");
  }
  }


相关文章
|
2天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
23天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
50 2
|
16天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
25 5
Java反射机制:解锁代码的无限可能
|
12天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
42 3
|
18天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
50 10
|
13天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
12天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
14天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
31 2
|
15天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
10 2
|
20天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
28 6