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


相关文章
|
8天前
|
Java 测试技术 应用服务中间件
常见 Java 代码缺陷及规避方式(下)
常见 Java 代码缺陷及规避方式(下)
30 0
|
9天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
25 8
|
12天前
|
前端开发 小程序 Java
uniapp上传图片 前端以及java后端代码实现
uniapp上传图片 前端以及java后端代码实现
28 0
|
14天前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
31 4
|
14天前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
30 4
|
15天前
|
存储 缓存 算法
优化 Java 后台代码的关键要点
【4月更文挑战第5天】本文探讨了优化 Java 后台代码的关键点,包括选用合适的数据结构与算法、减少不必要的对象创建、利用 Java 8 新特性、并发与多线程处理、数据库和缓存优化、代码分析与性能调优、避免阻塞调用、JVM 调优以及精简第三方库。通过这些方法,开发者可以提高系统性能、降低资源消耗,提升用户体验并减少运营成本。
|
16天前
|
Java 开发工具 流计算
flink最新master代码编译出现Java Runtime Environment 问题
在尝试编译Flink源码时遇到Java运行时环境致命错误:EXCEPTION_ACCESS_VIOLATION。问题出现在JVM.dll+0x88212。使用的是Java 11.0.28和Java HotSpot(TM) 64-Bit Server VM。系统为Windows客户端,没有生成核心dump文件。错误日志保存在hs_err_pid39364.log和replay_pid39364.log。要解决这个问题,建议检查JDK版本兼容性,更新JDK或参照错误报告文件提交Bug至http://bugreport.java.com/bugreport/crash.jsp。
|
13天前
|
人工智能 Java
Java练习题-输出二维数组对角线元素和
Java练习题-输出二维数组对角线元素和
19 1
|
2天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
8天前
|
Java
代码的魔法师:Java反射工厂模式详解
代码的魔法师:Java反射工厂模式详解
21 0