如何设置嵌套for循环,正确遍历Java二维数组调用指定方法?
解决方案
首先明确你的二维数组是按属性分组的结构:
ships[0]:所有船只的图片路径数组ships[1]:所有船只的X坐标数组ships[2]:所有船只的Y坐标数组
每艘船的完整信息对应三个数组的相同索引位置(比如第0艘船的图片是ships[0][0],X坐标是ships[1][0],Y坐标是ships[2][0])。
原代码的循环逻辑颠倒且硬编码了下标,以下是两种符合需求的修改方案:
方案1:转换数组结构为按船只分组(更易维护)
先把按属性分组的数组转换成按船只分组的结构,每一个子数组对应一艘船的完整信息,之后直接遍历每艘船即可:
public void createScene() { // 获取船只总数(以第一组属性的长度为准) int shipCount = ships[0].length; // 新建按船只分组的数组,每个子数组存一艘船的所有属性 String[][] shipDetails = new String[shipCount][ships.length]; // 转换数组结构 for (int i = 0; i < shipCount; i++) { for (int j = 0; j < ships.length; j++) { shipDetails[i][j] = ships[j][i]; } } // 遍历每艘船,调用drawImage for (String[] ship : shipDetails) { drawImage(ship[0], ship[1], ship[2], 250, 7); } }
方案2:直接按索引逻辑循环(无需转换数组)
如果不想修改数组结构,可通过循环收集单艘船的所有属性,避免硬编码下标:
public void createScene() { int shipCount = ships[0].length; // 遍历每一艘船 for (int i = 0; i < shipCount; i++) { String[] shipParams = new String[ships.length]; // 收集当前船的所有属性(图片、X坐标、Y坐标) for (int j = 0; j < ships.length; j++) { shipParams[j] = ships[j][i]; } // 调用绘图方法 drawImage(shipParams[0], shipParams[1], shipParams[2], 250, 7); } }
两种方案都避免了手动硬编码数组的第二个下标(0/1/2),且逻辑更清晰,后续如果新增船只属性(如血量、护甲),只需调整数组结构或参数收集逻辑即可。
内容的提问来源于stack exchange,提问作者Derek Herbert
相关产品推荐
相关产品推荐

