二维int数组查找0坐标时调用add方法报错问题求助
问题分析与解决方案
Hey there, let's break down what's going wrong here and fix it step by step!
核心问题:Java数组没有add()方法
你标记的错误很明确:Java中的基本类型数组(比如int[])是固定长度的,根本没有add()方法——这个方法是为ArrayList这类动态集合设计的,数组本身不支持动态添加元素。你初始化了一个长度为2的int[] coordinates,但直接调用coordinates.add(i,j)是完全不符合Java语法的。
解决方案1:只查找第一个0的坐标
如果你的需求是找到数组中第一个出现的0并返回它的坐标,只需要修改赋值方式,直接给数组的索引位置赋值即可:
public int[] locateZero(int[][] array) { // 初始化坐标为{-1,-1},用来标记没找到0的情况 int[] coordinates = {-1, -1}; for (int i = 0; i < array.length; i++) { // 注意:不要用array[0].length,万一二维数组是不规则的(行长度不同)会报错 for (int j = 0; j < array[i].length; j++) { if (array[i][j] == 0) { // 直接给数组的两个索引位置赋值 coordinates[0] = i; coordinates[1] = j; // 找到第一个0后直接返回,无需继续遍历 return coordinates; } } } // 遍历完没找到0,返回标记值{-1,-1} return coordinates; }
解决方案2:查找所有0的坐标
如果你的需求是收集数组中所有0的坐标,那么应该使用ArrayList<int[]>这种动态集合来存储(因为数组长度固定,没法动态添加多个坐标):
import java.util.ArrayList; import java.util.List; public List<int[]> locateAllZeros(int[][] array) { // 创建动态集合存储所有坐标 List<int[]> allCoordinates = new ArrayList<>(); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { if (array[i][j] == 0) { // 每次找到0,就创建一个新的int数组存储坐标,添加到集合中 allCoordinates.add(new int[]{i, j}); } } } return allCoordinates; }
额外注意事项
- 避免使用
array[0].length遍历列:如果你的二维数组是不规则的(比如某一行的长度和第一行不同),会抛出ArrayIndexOutOfBoundsException,一定要用array[i].length来获取当前行的长度。 - 处理未找到0的情况:如果是查找单个0,返回
{-1,-1}这类标记值比返回默认的{0,0}更合理,因为(0,0)可能是一个有效的坐标,会造成混淆。
内容的提问来源于stack exchange,提问作者stitch123
相关产品推荐
相关产品推荐

