You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:45:08