如何优化生成ASCII Art N的Java代码?简化逻辑并修正输出问题
简化ASCII Art 'N'的Java代码方案
我已实现生成ASCII艺术字'N'的Java代码,但逻辑过于复杂,希望简化。尝试删除代码中的if (i == 0) {//System.out.print("");}语句后,输入3时输出不符合预期(期望输出为:
N N NNN N N
)。现寻求可简化代码的方案,同时保证输入1、3、5等奇数时输出正确。
当前代码如下:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("type odd number"); int input = sc.nextInt(); for (int i = 0; i < input; i++) { System.out.print("N"); if (input == 1) { continue; } for (int j = i - 1; j > 0; j--) { System.out.print(" "); } if (i == 0) { //System.out.print(""); } else if(i != input - 1) { System.out.print("N"); } for (int j = 0; j < input - 2 - i; j++) { System.out.print(" "); } System.out.print("N"); System.out.println(); } }
不同输入的预期输出:
- 输入1时预期输出:
N
- 输入5时预期输出:
N N NN N N N N N NN N N
简化方案
核心思路是抓住ASCII 'N'的字符位置规律:每一行的第一列、最后一列始终是'N',另外行号等于列号的位置也是'N',其余位置填充空格。基于这个规律可以写出逻辑极简的代码:
import java.util.Scanner; public class AsciiNGenerator { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入奇数"); int size = sc.nextInt(); for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { // 判断当前位置是否需要打印N if (col == 0 || col == size - 1 || row == col) { System.out.print("N"); } else { System.out.print(" "); } } System.out.println(); // 每行结束换行 } sc.close(); } }
方案说明
- 逻辑直观:通过双层循环遍历每个位置,直接判断该位置是否属于'N'的固定位置,避免了原代码中复杂的嵌套循环和冗余条件
- 兼容性强:输入任意奇数(1、3、5等)都能输出符合预期的结果
- 易维护:后续修改样式只需调整判断条件即可,无需拆解多层循环
测试输入3时,输出如下:
N N NNN N N
内容的提问来源于stack exchange,提问作者hihi
相关产品推荐
相关产品推荐

