求助: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
相关产品推荐
相关产品推荐

