Java中如何移除二维数组中的最后一个元素
二维数组移除最后一个元素实现方案
原代码问题修正
你提供的初始代码存在几处会直接导致编译/运行异常的问题,需要先修复:
- 重复声明了
String[][] queue和Scanner scanner两个变量,同一作用域下不允许重复定义同名变量 - 循环中直接修改了初始赋值的
row、col变量,后续遍历逻辑容易出现索引越界,循环计数器建议单独在for循环内声明 - 多层循环、main方法缺少闭合大括号,语法不完整
核心实现逻辑
Java数组的长度在初始化完成后就固定不变,不存在直接删除元素的原生方法,要实现移除最后一个元素的效果,可根据需求选择以下两种方案:
方案1:清空最后一个元素的值(不改变数组长度)
如果不需要调整数组的结构,仅需要抹除最后一个位置的存储内容,直接将对应索引位置赋值为null即可。
数组索引从0开始计数,因此m行n列二维数组的最后一个元素坐标为[数组长度-1][最后一行的长度-1],在输入逻辑完成后添加如下代码即可:
int lastRowIndex = queue.length - 1; int lastColIndex = queue[lastRowIndex].length - 1; queue[lastRowIndex][lastColIndex] = null;
方案2:复制生成新数组(元素数量与数组长度匹配)
如果需要数组长度和实际存储元素数量一致,可以通过数组复制的方式生成去掉最后一个元素的新数组:如果最后一个元素是所在行的唯一元素,就直接移除最后一整行;否则仅缩短最后一行的长度,剔除最后一个元素。
完整可运行代码如下:
import java.util.Arrays; import java.util.Scanner; public class QueueTest { public static void main(String[] args) { int initRow = 2; int initCol = 2; String[][] queue = new String[initRow][initCol]; Scanner scanner = new Scanner(System.in); // 元素输入逻辑 for (int r = 0; r < queue.length; r++) { for (int c = 0; c < queue[r].length; c++) { System.out.println("Enter the name"); queue[r][c] = scanner.next(); } } scanner.close(); // 移除最后一个元素 int lastRow = queue.length - 1; int lastCol = queue[lastRow].length - 1; if (lastCol == 0) { // 最后一行仅存最后一个元素,直接移除整行 queue = Arrays.copyOf(queue, queue.length - 1); } else { // 缩短最后一行长度,移除最后一个元素 queue[lastRow] = Arrays.copyOf(queue[lastRow], queue[lastRow].length - 1); } // 遍历输出结果 for (int i = 0; i < queue.length; i++) { for (int j = 0; j < queue[i].length; j++) { System.out.print(queue[i][j] + " "); } System.out.println(); } } }
优化建议:如果业务中需要频繁对二维结构做增删操作,优先使用
ArrayList<ArrayList<String>>这类动态集合,集合自带remove()方法可以直接删除指定位置元素,不需要手动处理数组复制、长度调整的逻辑,开发效率更高。
内容的提问来源于stack exchange,提问作者Disanya Kaluarachchi
相关产品推荐
相关产品推荐

