麦当230 2022-10-25 13:33 采纳率: 50%
浏览 37
已结题

Java遇到以下问题

    我用以下代码想打印出一个矩形,但是实际效果如图所示,有谁知道是哪里不对吗?使用的是Java,jdk11,eclipse

img

    char map[][] = new char[18][32];   
    Scanner sc = new Scanner(System.in);
    int x = 1, y = 1;
    boolean finish = false;// 判断游戏是否结束
    
    for (int i = 0; i < map.length; i++) {
        if (i == 0 || i == 17) {
            for (int j = 0; j < map[i].length; j++) {
                    map[i][j] = '墙';
        }
        } else {
            map[i][0] = '墙';
            map[i][31] = '墙';
        }
    }
  • 写回答

3条回答 默认 最新

  • a5156520 2022-10-25 14:01
    关注

    主要原因是一个中文字符的打印宽度和一个空格字符的打印宽度不一致,大致比例是3个'墙'字符和4个空格字符的宽度相同,依照这一点,修改如下:

    import java.util.Scanner;
    
    public class CreateWall {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            char map[][] = new char[18][32];   
           // Scanner sc = new Scanner(System.in);
            int x = 1, y = 1;
            boolean finish = false;// 判断游戏是否结束
           // System.out.println("map.length="+map.length);
            //System.out.println("墙    墙"); 
            //System.out.println("墙墙墙墙墙");
    //        
            for (int i = 0; i < map.length; i++) {
                if (i == 0 || i == 17) {
                    for (int j = 0; j < map[i].length; j++) {
                            map[i][j] = '墙';
                    }
                } else  {//当不是第一行和最后一行的其他的行,第一列和最后一列为'墙'字符,其他列为空格
                    for(int j=0;j<map[i].length;j++) {
                        if(j==0||j==31) { 
                            map[i][j] = '墙';
                            
                        }else {
                            map[i][j]=' ';
                        }
                    }
                }
            }
               
          
            
            for(int i=0;i<map.length;i++) {
                
                for(int j=0;j<map[i].length;j++) {
                    if(map[i][j]!=' ') {  //当不为空格,即为'墙'字符,则输出它
                        System.out.print(map[i][j]);
                    }else {  //如果是空格,则每隔三个字符输出四个空格,以对齐三个中文字符
                        if(j%2==0) //在cmd下改为 j%2==0 ,在eclipse里面改为j%3==0
                        System.out.print("    ");
    
                    }
                }
                System.out.println();
            }
            
        }
    
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?