如何用Java实现指定图案?需用流程控制,排查现有代码问题
Java指定图案打印问题修正
问题说明
需通过流程控制语句(if、for等)实现指定图案,不可直接逐行打印,现有代码输出不符合预期,需排查并修正。
目标图案
| || || || || || || ||<3| | || || || || || ||<3||##| | || || || || ||<3||##||<3| | || || || ||<3||##||<3||##| | || || ||<3||##||<3||##||<3| | || ||<3||##||<3||##||<3||##| | ||<3||##||<3||##||<3||##||<3| |<3||##||<3||##||<3||##||<3||##|
现有错误代码
class Main { public static void main(String [] args){ int x; for(int y = 1; y < 9; y++){ for(x = 1; x < 9; x++){ if(x > 8 - y){ Stairs(true); Stairs(false); } else{ System.out.print("| |"); } } System.out.println(); } } public static void Stairs(boolean odd){ System.out.print("|" + ((odd)? "<3" : "##") + "|"); } }
错误输出
| || || || || || || ||<3||##| | || || || || || ||<3||##||<3||##| | || || || || ||<3||##||<3||##||<3||##| | || || || ||<3||##||<3||##||<3||##||<3||##| | || || ||<3||##||<3||##||<3||##||<3||##||<3||##| | || ||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##| | ||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##| |<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
问题分析
原代码核心错误:内层循环判断x > 8 - y时,会连续调用两次Stairs方法输出两个图案单元,导致每行总单元数远超目标的8个。正确逻辑应为每行固定输出8个单元,仅对8 - y之后的位置交替替换为<3或##。
修正后的代码
class Main { public static void main(String[] args) { // 控制行数,共8行 for (int y = 1; y <= 8; y++) { // 控制每行的8个单元 for (int x = 1; x <= 8; x++) { if (x > 8 - y) { // 计算当前单元在替换区域的位置,奇数位输出<3,偶数位输出## int posInReplace = x - (8 - y); System.out.print("|" + (posInReplace % 2 == 1 ? "<3" : "##") + "|"); } else { // 未替换单元输出空白样式 System.out.print("| |"); } } System.out.println(); } } }
验证结果
运行修正后的代码,输出与目标图案完全一致。
内容的提问来源于stack exchange,提问作者Arunim Goyal
相关产品推荐
相关产品推荐

