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

求助:5x3布尔数组反转实现报错,需打印数组反转结果

搞定5x3布尔数组反转问题!

嘿,我猜你应该是在写Java代码吧(毕竟提到了“方法”),先帮你理清楚问题,然后直接给可运行的解决方案~

首先先明确:二维数组的“反转”通常有两种常见需求,咱们先按最常用的行级反转(把第一行和最后一行交换,第二行和倒数第二行交换)来实现,如果你要的是把所有元素按逆序重新排列,后面也给你补充方案。


完整可运行代码(已修复反转问题)

import java.util.Scanner;

public class BooleanArrayHandler {
    // 专门负责打印二维数组的方法
    public static void print2DArray(boolean[][] arr) {
        for (boolean[] row : arr) {
            for (boolean element : row) {
                System.out.print(element + "\t");
            }
            System.out.println();
        }
    }

    // 核心:二维数组行反转的方法
    public static void reverse2DArray(boolean[][] arr) {
        int totalRows = arr.length;
        // 只需要交换前半部分和后半部分的行,循环到中间就够了
        for (int i = 0; i < totalRows / 2; i++) {
            // 交换第i行和倒数第i+1行的引用
            boolean[] tempRow = arr[i];
            arr[i] = arr[totalRows - 1 - i];
            arr[totalRows - 1 - i] = tempRow;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean[][] boolArray = new boolean[5][3];

        // 输入逻辑:让用户填5行,每行3个true/false
        System.out.println("请输入5行内容,每行3个true或false(用空格分隔):");
        for (int i = 0; i < 5; i++) {
            System.out.print("第" + (i+1) + "行:");
            for (int j = 0; j < 3; j++) {
                boolArray[i][j] = scanner.nextBoolean();
            }
        }

        // 打印原数组
        System.out.println("\n===== 原数组 =====");
        print2DArray(boolArray);

        // 调用反转方法
        reverse2DArray(boolArray);

        // 打印反转后的结果
        System.out.println("\n===== 反转后的数组 =====");
        print2DArray(boolArray);

        scanner.close();
    }
}

你之前反转出错的大概率原因

我猜你可能踩了这几个坑:

  • 没搞对二维数组的结构:二维数组的每一行是一个独立的一维数组引用,直接交换行引用就搞定行反转,不用逐个交换元素(当然元素级反转另说)
  • 循环边界写错了:反转的时候循环到行数的一半就行,要是循环到最后一行,会把已经交换好的行又换回去
  • 行和列索引搞混了:5x3是5行3列,别把行的索引和列的索引弄反啦

如果需要的是「所有元素逆序排列」

要是你的需求不是行反转,而是把整个数组的所有元素从后往前重新排(比如原数组最后一个元素变成第一个),用这个反转方法替换上面的reverse2DArray就行:

public static void reverseAllElements(boolean[][] arr) {
    int rows = arr.length;
    int cols = arr[0].length;
    int totalElements = rows * cols;
    // 先把二维数组转成一维数组
    boolean[] flatArr = new boolean[totalElements];
    int idx = 0;
    for (boolean[] row : arr) {
        for (boolean elem : row) {
            flatArr[idx++] = elem;
        }
    }
    // 反转一维数组
    for (int i = 0; i < totalElements / 2; i++) {
        boolean temp = flatArr[i];
        flatArr[i] = flatArr[totalElements - 1 - i];
        flatArr[totalElements - 1 - i] = temp;
    }
    // 转回二维数组
    idx = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            arr[i][j] = flatArr[idx++];
        }
    }
}

直接替换后运行,就能看到你要的反转结果啦~

内容的提问来源于stack exchange,提问作者Ryan Asciutto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:38:58