求助:用双层增强for循环统计二维布尔数组false值,返回语句致程序无法运行
解决二维布尔数组统计空座位(false)的问题
嘿,我瞅见你这段统计影院空座位的代码跑不起来,咱们来捋捋问题出在哪,然后给你改好的版本。
首先说你代码里的几个关键错误:
- 内层增强for循环写错了:你内层用
for (boolean[] seteNr : cinemaSeats),这是在遍历整个影院的所有行,而不是当前行里的单个座位!应该遍历当前行radNr里的每个布尔值才对。 - 多余的索引变量操作:你定义的
rowLength和seatLength完全没必要,还手动做递减操作,这会导致你用cinemaSeats[rowLength][seatLength]访问元素时,索引乱掉甚至触发数组越界异常——增强for循环本来就是直接遍历元素,根本不需要手动维护索引。 - 逻辑混乱导致计数错误:就算没报错,你的索引递减逻辑也会让你重复或者错误地访问座位,统计结果肯定不对。
下面是修正后的代码,完全用增强for循环实现,逻辑清晰:
public static int emptySeats(boolean[][] cinemaSeats) { int availableSeats = 0; // 外层遍历每一行 for (boolean[] row : cinemaSeats) { // 内层遍历当前行的每个座位 for (boolean seat : row) { // 如果座位是false(空座),计数加一 if (!seat) { availableSeats++; } } } return availableSeats; }
额外提个小建议:你原来用byte作为返回值,但是byte的最大值是127,如果影院座位数超过这个数,就会溢出报错。换成int会更安全,除非你能确定影院的座位总数绝对不会超过127个。
内容的提问来源于stack exchange,提问作者Lang Awuor
相关产品推荐
相关产品推荐

