Java实现10×10星号方块并替换指定坐标为O的问题排查
问题:10×10方块指定坐标替换输出异常排查修正
需求
- 使用
*打印10×10的正方形 - 将ArrayList中Character对象对应的(x,y)坐标位置输出为
O而非*,示例坐标为(5,5)、(7,8)、(3,1),预期输出为指定位置替换为O的10×10方块
现有以下代码运行后输出异常,不符合预期,需排查修正:
Character类代码
public class Character { int xLocation; int yLocation; public Character(int x, int y){ this.xLocation = x; this.yLocation = y; } public int getXLocation(){return xLocation;} public int getYLocation(){ return yLocation; } }
Main类代码
import java.util.ArrayList; public class Main { public static void main(String[] args) { int a = 10; ArrayList<Character> characters = new ArrayList<>(); Character character1 = new Character(5,5); Character character2 = new Character(7,8); Character character3 = new Character(3,1); characters.add(character1); characters.add(character2); characters.add(character3); for (int i = 1; i<=a; i++) { for (int v = 1; v <= a; v++) { for (int j = 0; j < characters.size(); j++) { if (v == characters.get(j).getXLocation() && i == characters.get(j).getYLocation()) { System.out.print("O "); } else System.out.print("* "); } System.out.println(); } } } }
错误输出
* * * * * * * * O * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * O * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * O * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
问题分析
- 循环逻辑错误:原代码在每个坐标位置
(v,i)遍历所有Character对象,每个对象都输出一个符号,导致每行打印3个符号(对应3个Character实例),最终输出为10行×30列的内容,完全偏离10×10的需求。 - 符号判断逻辑错误:应该先默认当前坐标输出
*,仅当遍历到匹配的Character坐标时才改为输出O,而非每个Character都独立输出一次符号。
修正后的Main类代码
import java.util.ArrayList; public class Main { public static void main(String[] args) { int a = 10; ArrayList<Character> characters = new ArrayList<>(); Character character1 = new Character(5,5); Character character2 = new Character(7,8); Character character3 = new Character(3,1); characters.add(character1); characters.add(character2); characters.add(character3); for (int i = 1; i <= a; i++) { for (int v = 1; v <= a; v++) { // 默认输出* char symbol = '*'; // 遍历所有Character,检查坐标是否匹配 for (Character c : characters) { if (v == c.getXLocation() && i == c.getYLocation()) { symbol = 'O'; break; // 找到匹配后无需继续遍历 } } System.out.print(symbol + " "); } // 每行结束换行 System.out.println(); } } }
正确输出示例
* * * O * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * O * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * O * * * * * * * * * * * * * * * * * * * * * * *
内容的提问来源于stack exchange,提问作者WHEEW
相关产品推荐
相关产品推荐

