You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化生成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();
    }
}

方案说明

  1. 逻辑直观:通过双层循环遍历每个位置,直接判断该位置是否属于'N'的固定位置,避免了原代码中复杂的嵌套循环和冗余条件
  2. 兼容性强:输入任意奇数(1、3、5等)都能输出符合预期的结果
  3. 易维护:后续修改样式只需调整判断条件即可,无需拆解多层循环

测试输入3时,输出如下:

N N
NNN
N N

内容的提问来源于stack exchange,提问作者hihi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:09:54